ठीक नहीं होगा, यह एक मामला है जब मैं CGImageSource के साथ काम करते समय आया था और देखा कि CFDictionary और NSDictionary के बीच टोल फ्री-ब्रिजिंग कुछ मामलों में समस्याओं में भाग लेती है । मैं दिखाने के लिए मैं क्या मतलब है नीचे दिए गए उदाहरण के निर्माण के लिए प्रबंधित किया है:CFDictionary NSDictionary (स्विफ्ट 2.0/आईओएस 9)
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 –