如何在Swift 3中访问CFDictionary?

Tre*_*lyn 11 core-foundation swift swift3

我需要从CFDictionary实例中读取和写入一些数据(以读取和更新照片中的EXIF数据).对于我的生活,我无法弄清楚如何在Swift 3中执行此操作.我想要的呼叫的签名是:

func CFDictionaryGetValue(CFDictionary!, UnsafeRawPointer!)
Run Code Online (Sandbox Code Playgroud)

我怎么把我的键(一个字符串)转换成一个UnsafeRawPointer所以我可以将它传递给这个调用?

Cod*_*ent 14

如果您不必处理期望的其他Core Foundation函数CFDictionary,可以通过转换为Swift本机来简化它Dictionary:

if let dict = cfDict as? [String: AnyObject] {
    print(dict["key"])
}
Run Code Online (Sandbox Code Playgroud)

  • 注意此方面的性能问题-将CFDictionary转换为Swift Dictionary是一项昂贵的操作。请参阅下面的答案:/sf/answers/3193805121/ (2认同)

Gab*_*iel 6

请小心将a转换CFDictionary为Swift本机字典。正如我刚刚在我自己的代码中发现的那样,桥接实际上是非常昂贵的(可以进行概要分析!),因此,如果调用它的次数很多(对我来说是如此),这可能会成为一个大问题。

请记住,这CFDictionary是与桥接的免费电话NSDictionary。因此,您可以做的最快的事情看起来像这样:

let cfDictionary: CFDictionary = <code that returns CFDictionary>
if let someValue = (cfDictionary as NSDictionary)["some key"] as? TargetType {
    // do stuff with someValue
}
Run Code Online (Sandbox Code Playgroud)