问题描述
这是我在早期版本的Swift中可用的代码:
Here was my workable code in the previous version of Swift:
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.
After changes in the Swift 3.0 I have to convert my keys and values arrays into UnsafeMutablePointer<UnsafeRawPointer?>
for creating CFDictionary.
这种方式:
let imageOptionsDictKeysPointer = UnsafeMutablePointer<UnsafeRawPointer?>.allocate(capacity: 1)
imageOptionsDictKeysPointer.initialize(to: imageOptionsDictKeys)
给出了错误的访问错误.
gives an Bad Access error.
阅读文档后,我尝试编译此代码:
And after reading documentation I am trying to compile this code:
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)
但是错误无法推断出通用参数实例" 出现在 Unmanaged.passUnretained( array ).toOpaque()
but error Generic parameter 'Instance' could not be inferred appears in the lines Unmanaged.passUnretained(array).toOpaque()
我现在不知道如何以编程方式创建CFDictionary.
I have no idea how to create CFDictionary programmatically now.
推荐答案
我刚刚解决了将数组转换为UnsafeMutablePointer< UnsafeMutablePointer<T>>
的类似问题,您可以在这里找到:针对C型浮点数的Swift 3 UnsafeMutablePointer初始化**
I just solved a similar issue converting arrays to UnsafeMutablePointer< UnsafeMutablePointer<T>>
which you can find here:Swift 3 UnsafeMutablePointer initialization for C type float**
要使用相同的方案转换swift数组,请按照此处的建议使用UnsafeMuTablePointer
: http://technology.meronapps.com/2016/09/27/swift-3-0-unsafe-world-2/
To convert swift arrays using the same scheme, use UnsafeMuTablePointer
as suggested here: http://technology.meronapps.com/2016/09/27/swift-3-0-unsafe-world-2/
这篇关于如何将数组转换为UnsafeMutablePointer< UnsafeRawPointer?雨燕3.0?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!