OK, đây là trường hợp tôi gặp phải khi làm việc với CGImageSource và nhận thấy rằng cầu nối miễn phí giữa CFDictionary và NSDictionary dường như gặp sự cố trong một số trường hợp . Tôi đã quản lý để xây dựng ví dụ dưới đây để cho thấy ý tôi là:CFDictionary sẽ không kết nối với 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
}
Khá đơn giản (và hơi ngớ ngẩn) nhưng hàm của nó trở về và tùy chọn CFDictionary. "Vui vẻ" bắt đầu khi cố gắng tạo NSDictionary từ chức năng này:
Tại sao công việc sau đây không?
if let problemDictionary = optionalProblemDictionary() as? NSDictionary {
print(problemDictionary) // never enters, no warnings, compiles just fine
}
Mặc dù điều này có hiệu quả?
if let cfDictionary = optionalProblemDictionary() {
let problemDictionary = cfDictionary as NSDictionary
print(problemDictionary)
}
XCode 7.0 (7A220)
Nó không trả lời cho câu hỏi - làm thế nào để chuyển đổi sang NSDictionary. –
@AlexanderVolkov: Tôi nghĩ rằng nó có: 'nếu để cho problemDictionary = cfDict là NSDictionary? {...} 'phôi CFDictionary? để NSDictionary ?, và sử dụng tùy chọn ràng buộc để unwrap rằng để NSDictionary. Vui lòng cho tôi biết bạn thiếu thông tin nào. –
Hãy xem ảnh chụp màn hình. Kết quả của dàn diễn viên là nil - http://www.screencast.com/t/hbjhDzCs0K –