Здесь был мой выполнимый код в предыдущей версии Swift:Как преобразовать массив в UnsafeMutablePointer <UnsafeRawPointer?> Swift 3.0?
let imageOptionsDictKeys = [ kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey, kCVPixelBufferHeightKey, kCVPixelBufferOpenGLESCompatibilityKey, kCVPixelBufferIOSurfacePropertiesKey]
let imageOptionsDictValues = [ cvPixelFormatType, frameW, frameH, boolYES]
var keyCallbacks = kCFTypeDictionaryKeyCallBacks
var valueCallbacks = kCFTypeDictionaryValueCallBacks
let imageOptions = CFDictionaryCreate(kCFAllocatorDefault, UnsafeMutablePointer(imageOptionsDictKeys), UnsafeMutablePointer(imageOptionsDictValues), 4, &keyCallbacks, &valueCallbacks)
После изменений в Swift 3.0 я должен преобразовать ключи и значения массива в UnsafeMutablePointer<UnsafeRawPointer?>
для создания CFDictionary.
Таким образом:
let imageOptionsDictKeysPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeys)
дает Bad ошибку доступа.
И после прочтения документации я пытаюсь скомпилировать этот код:
let imageOptionsDictKeys = [kCVPixelBufferPixelFormatTypeKey, kCVPixelBufferWidthKey, kCVPixelBufferHeightKey, kCVPixelBufferOpenGLESCompatibilityKey]
let imageOptionsDictKeysRawPointer = Unmanaged.passUnretained(imageOptionsDictKeys).toOpaque()
let imageOptionsDictKeysPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeysRawPointer)
let imageOptionsDictValues = [ cvPixelFormatType, frameW, frameH, boolYES]
let imageOptionsDictValuesRawPointer = Unmanaged.passUnretained(imageOptionsDictValues).toOpaque()
let imageOptionsDictValuesPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictValuesPointer.initialize(to: imageOptionsDictValuesRawPointer)
let imageOptions = CFDictionaryCreate(kCFAllocatorDefault, imageOptionsDictKeysPointer, imageOptionsDictValuesPointer, 4, &keyCallbacks, &valueCallbacks)
но ошибка Generic параметр «Instance» не может быть выведено появляется в строках Unmanaged.passUnretained (массив). toOpaque()
Я понятия не имею, как создать CFDictionary программно сейчас.
Не создать CFDictionary. Вместо этого создайте Swift Dictionary, например, здесь: http://stackoverflow.com/a/38171414/1187415. –
Мне нужно вызвать функцию VTCompressionSessionCreate (....) с параметрами CFDictionary. Я не уверен, что могу использовать только Swift Dictionary ... или они каким-то образом конвертируемы? – JULIIncognito
Похоже на излишне сложный способ создания «CFDictionary» и учебника [XY Problem] (http://xyproblem.info). См. Http://stackoverflow.com/q/29301302/3141234 – Alexander