微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

根据 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,&valueCallbacks)

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

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐