Как создать словарь атрибутов CVPixelBuffer в Swift
Чтобы создать атрибуты CVPixelBuffer в Objective-C, я бы сделал что-то вроде этого:
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?
1 ответ
Просто используйте вместо этого 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 либо; об этом позаботится для нас мост Свифта автоматически.