我需要从CFDictionary
个实例读取和写入一些数据(以读取和更新照片中的EXIF数据)。对于我的生活,我无法弄清楚如何在Swift 3中这样做。我想要的电话签名是:
func CFDictionaryGetValue(CFDictionary!, UnsafeRawPointer!)
如何将我的密钥(字符串)转换为UnsafeRawPointer
,以便将其传递给此电话?
答案 0 :(得分:12)
如果您不必处理期望CFDictionary
的其他Core Foundation功能,可以通过转换为Swift native Dictionary
来简化它:
if let dict = cfDict as? [String: AnyObject] {
print(dict["key"])
}
答案 1 :(得分:4)
小心地将CFDictionary
转换为Swift本地词典。桥接实际上是非常昂贵的,因为我刚刚在我自己的代码中找到了(yay for profiling!),所以如果它被调用了很多(就像我这样),这可能会成为一个大问题。
请注意,CFDictionary
与NSDictionary
免费桥接。所以,你能做的最快的事情看起来更像是这样:
let cfDictionary: CFDictionary = <code that returns CFDictionary>
if let someValue = (cfDictionary as NSDictionary)["some key"] as? TargetType {
// do stuff with someValue
}
答案 2 :(得分:1)
如下:
var key = "myKey"
let value = withUnsafePointer(to: &key){ upKey in
return CFDictionaryGetValue(myCFDictionary, upKey)
}
答案 3 :(得分:-1)
你可以这样写:
let key = "some key" as NSString
if let rawResult = CFDictionaryGetValue(cfDictionary, Unmanaged.passUnretained(key).toOpaque()) {
let result = Unmanaged<AnyObject>.fromOpaque(rawResult).takeUnretainedValue()
print(result)
}
但是我猜你不想在从CFDictionary
检索一些数据的时候写这样的东西。您最好按照Code Different的答案中的建议将其转换为Swift Dictionary
。