Хорошо, это случай, который я натолкнулся на работу с 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: Я думаю, что он делает: 'if let problemDictionary = cfDict как NSDictionary? {...} 'отличает CFDictionary? в NSDictionary ?, и использует необязательную привязку, чтобы развернуть это в NSDictionary. Пожалуйста, дайте мне знать, какая именно информация отсутствует. –
Взгляните на скриншот. Результат приведения - nil - http://www.screencast.com/t/hbjhDzCs0K –