Преобразование [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, nil]; Свифт

Получение ошибки здесь. Стойка моего мозга. Перепробовал всевозможные комбинации.

Не удается найти инициализатор для типа 'NSDictionary', который принимает список аргументов типа '(object:(Int), forKey: CFString!)'

// configure the pixel format -  Obj-C
// videoOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, nil];

// Swift       
videoOutput.videoSettings = NSDictionary(object: Int(kCVPixelFormatType_32BGRA), forKey:kCVPixelBufferPixelFormatTypeKey)

3 ответа

Решение

Обновление: Xcode 7.0 • Swift 2.0

videoOutput.videoSettings = NSDictionary(object: Int(kCVPixelFormatType_32BGRA), forKey: kCVPixelBufferPixelFormatTypeKey as String) as [NSObject : AnyObject]

или просто

videoOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey : Int(kCVPixelFormatType_32BGRA)]

Это было изменено в Swift 4.x, для меня работает следующее:

captureVideoDataOutput.videoSettings = 
    [kCVPixelBufferPixelFormatTypeKey as String : kCVPixelFormatType_32BGRA]

Похоже, тип будет [String: Int],

На самом деле, просматривая документы Xcode, он говорит, что значение может быть либо одним числом, либо массивом. Если это массив, то тип будет [String: [Int]],

Таким образом, вы должны быть в состоянии сказать:

let aVideoSetting: [String: Int] =
[kCVPixelBufferPixelFormatTypeKey: kCVPixelFormatType_32BGRA] videoOutput.videoSettings = aVideoSetting

Я все еще не на 100% совместим с типами какао и типами Swift, так что это может быть не идеально, но это близко.

Вы также можете переписать свой код для создания NSDictonary в быстром синтаксисе:

let aPixelFormat = NSNumber(int: kCVPixelFormatType_32BGRA)
let settingsDict = NSDictionary(aPixelFormat 
  forKey:  "numberWithUnsignedInt:kCVPixelFormatType_32BGRA")
Другие вопросы по тегам