如何在Swift中创建CVPixelBuffer属性字典

时间:2015-12-03 21:52:41

标签: swift cvpixelbuffer cfdictionary

要在 Objective-C 中创建CVPixelBuffer属性,我会这样做:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey,
                         [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey,
                         nil];

然后在CVPixelBufferCreate meathod我会传递(__bridge CFDictionaryRef) attributes作为参数。

Swift 中,我试图像这样创建我的字典:

let attributes:[CFString : NSNumber] = [
        kCVPixelBufferCGImageCompatibilityKey : NSNumber(bool: true),
        kCVPixelBufferCGBitmapContextCompatibilityKey : NSNumber(bool: true)
    ]

但是我发现CFString不是Hashable并且很好,我无法让它工作。

有人可以提供一个如何在Swift中运行的示例吗?

1 个答案:

答案 0 :(得分:3)

只需使用NSString:

let attributes:[NSString : NSNumber] = // ... the rest is the same

毕竟,这就是你在Objective-C代码中真正做的事情;这就是Objective-C为您提供的桥梁。 CFString不能是Objective-C字典中的关键字,而不能是Swift字典中的关键字。

另一种(也许是Swiftier)方式是写这个:

let attributes : [NSObject:AnyObject] = [
    kCVPixelBufferCGImageCompatibilityKey : true,
    kCVPixelBufferCGBitmapContextCompatibilityKey : true
]

请注意,通过这样做,我们不必将true包裹在NSNumber中;我们将自动通过Swift的桥接为我们照顾。