当前位置 : 主页 > 手机开发 > 其它 >

swift – 如何在OS X目标中创建CFDictionary?

来源:互联网 收集:自由互联 发布时间:2021-06-11
根据 documentation CFDictionaryCreate用于在swift中实例化CFDictionary. func CFDictionaryCreate(_ allocator: CFAllocator!, _ keys: UnsafeMutablePointerUnsafePointerVoid, _ values: UnsafeMutablePointerUnsafePointerVoid, _ numValues: C
根据 documentation CFDictionaryCreate用于在swift中实例化CFDictionary.

func CFDictionaryCreate(_ allocator: CFAllocator!,
                  _ keys: UnsafeMutablePointer<UnsafePointer<Void>>,
                  _ values: UnsafeMutablePointer<UnsafePointer<Void>>,
                  _ numValues: CFIndex,
                  _ keyCallBacks: UnsafePointer<CFDictionaryKeyCallBacks>,
                  _ valueCallBacks: UnsafePointer<CFDictionaryValueCallBacks>) -> CFDictionary!

如何创建键和值参数?
到目前为止,我已经尝试使用swift的String类型,希望它会自动转换为适当的类型:

import Foundation

var keys : [String] = ["key1", "key2"]
var values : [String] = ["value1", "value2"]
var keyCallbacks = kCFTypeDictionaryKeyCallBacks
var valueCallbacks = kCFTypeDictionaryValueCallBacks
var dict : CFDictionary = CFDictionaryCreate(kCFAllocatorDefault,
    &keys, &values, 2, &keyCallbacks, &valueCallbacks)

不幸的是我收到一个错误,说String不是键和值数组元素的正确类型:

main.swift:41:2: error: 'String' is not identical to 'UnsafePointer<Void>'
    &configKeys, &configValues, 3, &keyCallbacks, &valueCallbacks)

如何制作UnsafePointer< Void>来自String?

对于Swift 3,您需要额外投射到CFDictionary.
否则,上下文类型’CFDictionary’不能与字典文字一起使用.

let options: CFDictionary = [kSecImportExportPassphrase as String : "certificateKey"] as CFDictionary

有关更多信息,请参见https://bugs.swift.org/browse/SR-2388

网友评论