これはCGImageSourceを使って作業するときに起こりましたが、CFDictionaryとNSDictionaryの間のフリーダイヤルが特定のケース。私は私が何を意味するかを示すために以下の例を構築するために管理している: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を作成しようとすると「楽しい」が始まります:
なぜ次のようなことはできませんか?
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)
それは質問には答えていない - NSDictionaryのに変換する方法。 –
@AlexanderVolkov:私はそう思っています: 'problemDictionary = cfDictをNSDictionaryとすれば? {...} 'CFDictionaryをキャストしますか? NSDictionary?に変換し、オプションのバインディングを使用してNSDictionaryにラップします。どんな情報が欠けているのか教えてください。 –
スクリーンショットをご覧ください。キャストの結果は無しです - http://www.screencast.com/t/hbjhDzCs0K –