CFDictionary
インスタンスからいくつかのデータを読み書きする必要があります(写真のEXIFデータを読み書きするため)。私の人生では、Swift 3。でこれを行う方法を理解できません。必要な呼び出しの署名は次のとおりです。
func CFDictionaryGetValue(CFDictionary!, UnsafeRawPointer!)
キー(文字列)をUnsafeRawPointer
に変換して、この呼び出しに渡すにはどうすればよいですか?
CFDictionary
を期待する他のCoreFoundation関数を処理する必要がない場合は、SwiftネイティブDictionary
:に変換することで単純化できます。
if let dict = cfDict as? [String: AnyObject] {
print(dict["key"])
}
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
}
次のようなものはどうですか?
var key = "myKey"
let value = withUnsafePointer(to: &key){ upKey in
return CFDictionaryGetValue(myCFDictionary, upKey)
}