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

How to create CVPixelBuffer attributes dictionary in Swift

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

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

然后在 CVPixelBufferCreate 方法中我将传递 (__bridge CFDictionaryRef) attributes 作为参数。

Swift 中,我正在尝试创建这样的字典:

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

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

有人可以提供一个示例说明它在 Swift 中的工作原理吗?

只需使用 NSString 代替:

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

毕竟,这就是您在 Objective-C 代码中真正做的事情;只是 Objective-C 为您搭建了桥梁。 CFString 不能是 Objective-C 字典中的键,也不能是 Swift 字典中的键。

另一种(可能 Swift 以上)的方式是这样写:

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

请注意,通过这样做,我们也不必将 true 包装在 NSNumber 中; Swift 的桥接会自动为我们处理。