CFDictionary不会桥接到NSDictionary(Swift 2.0 / iOS9)
发布时间:2020-12-14 04:41:17 所属栏目:百科 来源:网络整理
导读:好吧,这是我在使用CG ImageSource时遇到的情况,并注意到CFDictionary和NSDictionary之间的免费桥接在某些情况下似乎遇到了问题.我已设法构建以下示例以显示我的意思: func optionalProblemDictionary() - CFDictionary? { let key = "key" let value = "val
好吧,这是我在使用CG
ImageSource时遇到的情况,并注意到CFDictionary和NSDictionary之间的免费桥接在某些情况下似乎遇到了问题.我已设法构建以下示例以显示我的意思:
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) 解决方法
原因似乎是函数返回一个可选项
CFDictionary?并且不能强制转换为(非可选) 的NSDictionary. 这是一个更简单的示例,演示了与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的方法不正确 我不知道在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 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |