CFError到NSError的免费桥接在Swift 3中不起作用

Ram*_*sel 3 core-foundation swift swift3

将我们的代码库转换为Swift 3,我遇到了这个问题:

ABAddressBookRequestAccessWithCompletion(addressBookRef) { (granted: Bool, error: CFError?) in
        DispatchQueue.main.async {

            if let nsError = error as NSError {
                ...   
            }
        }
}
Run Code Online (Sandbox Code Playgroud)

编译器错误是: Cannot convert value of type 'CFError?' to type 'NSError' in coercion


改为:

if let nsError = error as? NSError { ... }
Run Code Online (Sandbox Code Playgroud)

发出警告: Cast from 'CFError?' to unrelated type 'NSError' always fails

mat*_*att 6

不要试图通过NSError.直接强制错误,Swift类型.

if let err = error as? Error {
    print(err) // no problem
}
Run Code Online (Sandbox Code Playgroud)