2015-12-03 2 views
1

Pour créer un CVPixelBuffer attributs dans Objective-C je ferais quelque chose comme ceci:Comment créer CVPixelBuffer attributs dictionnaire Swift

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

Et puis dans le CVPixelBufferCreate meathod je passerais (__bridge CFDictionaryRef) attributes comme paramètre.

Dans Swift Je tente de créer mon dictionnaire comme celui-ci:

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

mais je découvre que CFString n'est pas indexables et bien, je suis incapable d'obtenir que cela fonctionne. Est-ce que quelqu'un peut donner un exemple de comment cela fonctionne dans Swift?

Répondre

3

Il suffit d'utiliser NSString à la place:

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

Ce, après tout, est ce que vous faisiez vraiment dans le code Objective-C; c'est juste que Objective-C était un pont pour vous. Un CFString ne peut pas être la clé dans un dictionnaire Objective-C plus que dans un dictionnaire Swift.

Un autre (peut-être Swiftier) façon est d'écrire ceci:

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

Notez qu'en faisant cela, nous ne devons pas envelopper true dans un NSNumber soit; cela sera pris en charge par Swift automatiquement.