Как создать словарь атрибутов 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 либо; об этом позаботится для нас мост Свифта автоматически.

Другие вопросы по тегам