要在 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中运行的示例吗?
答案 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的桥接为我们照顾。