大佬教程收集整理的这篇文章主要介绍了CFDictionary不会桥接到NSDictionary(Swift 2.0 / iOS9),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func optionalProblemDictionary() -> CFDictionary? { let key = "key" let value = "value" var keyCallBACks = CFDictionaryKeyCallBACks() var valueCallBACks = CFDictionaryValueCallBACks() let cfDictionary = CFDictionaryCreate(kcfAllocatorDefault,UnsafeMutablePointer(unsafeAddressOf(key)),UnsafeMutablePointer(unsafeAddressOf(value)),1,&keyCallBACks,&valueCallBACks) return cfDictionary }
相当简单(有点傻)但它的功能返回和可选的CFDictionary.尝试从此函数创建NSDictionary时,“fun”开始:
以下为什么不工作?
if let problemDictionary = optionalProblemDictionary() as? NSDictionary { print(problemDictionary) // never enters,no warnings,compiles just fine }
虽然这很好吗?
if let cfDictionary = optionalProblemDictionary() { let problemDictionary = cfDictionary as NSDictionary print(problemDictionary) }
XCode 7.0(7A220)
这是一个更简单的示例,演示了与CFString和NSString相同的问题:
let cfString = "foobar" as CFString? if let s1 = cfString as? NSString { print("s1 = \(s1)") // not executed }
(问题仍然是为什么这不会给编译器错误或
至少编译器警告,因为这个可选的强制转换可以
永远不会成功.)
但是对可选的NSString进行转换?作品:
if let s2 = cfString as NSString? { print("s2 = \(s2)") // prints "s2 = foobar" }
在您的情况下,如果您将“有问题的案例”更改为
if let problemDictionary = cfDict as NSDictionary? { print(problemDictionary) }
然后执行if-block.
请注意,在Swift中构建CFDictionary的方法不正确
并在我的测试中实际导致程序崩溃.一个原因是
字典回调设置为空结构.
另一个问题是unsafeAddressOf(key)桥接了Swift
字符串到NSString,可以立即解除分配.
我不知道在Swift中构建CFDictionary的最佳方法是什么,
但这在我的测试中起作用:
func optionalProblemDictionary() -> CFDictionary? { let key = "key" as NSString let value = "value" as NSString var keys = [ unsafeAddressOf(key) ] var values = [ unsafeAddressOf(value) ] var keyCallBACks = kcfTypeDictionaryKeyCallBACks var valueCallBACks = kcfTypeDictionaryValueCallBACks let cfDictionary = CFDictionaryCreate(kcfAllocatorDefault,&keys,&values,&valueCallBACks) return cfDictionary }
以上是大佬教程为你收集整理的CFDictionary不会桥接到NSDictionary(Swift 2.0 / iOS9)全部内容,希望文章能够帮你解决CFDictionary不会桥接到NSDictionary(Swift 2.0 / iOS9)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。