OK, questo è un caso che ho riscontrato lavorando con CGImageSource e ho notato che il collegamento senza pedaggio tra CFDictionary e NSDictionary sembra incorrere in problemi in alcuni casi . Sono riuscito a costruire l'esempio di seguito per mostrare quello che voglio dire:CFDictionary non collegherà 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
}
abbastanza semplice (e un po 'stupido), ma la sua una funzione che restituisce e facoltativo CFDictionary. Il "divertimento" inizia quando si tenta di creare un NSDictionary da questa funzione:
Perché i seguenti lavori non funzioneranno?
if let problemDictionary = optionalProblemDictionary() as? NSDictionary {
print(problemDictionary) // never enters, no warnings, compiles just fine
}
Mentre funziona?
if let cfDictionary = optionalProblemDictionary() {
let problemDictionary = cfDictionary as NSDictionary
print(problemDictionary)
}
XCode 7.0 (7A220)
Essa non risponde alla domanda - come convertire a NSDictionary. –
@AlexanderVolkov: Penso che lo faccia: 'se let problemDictionary = cfDict come NSDictionary? {...} 'lancia il CFDictionary? a NSDictionary ?, e utilizza l'associazione facoltativa per scartarla a NSDictionary. Per favore fammi sapere quali informazioni ti mancano. –
Dai uno sguardo allo screenshot. Il risultato del cast è nil - http://www.screencast.com/t/hbjhDzCs0K –