CFError到NSError的免费桥接在Swift 3中不起作用
将我们的代码库转换为Swift 3时,我遇到了以下问题:CFError到NSError的免费桥接在Swift 3中不起作用,swift,swift3,core-foundation,Swift,Swift3,Core Foundation,将我们的代码库转换为Swift 3时,我遇到了以下问题: ABAddressBookRequestAccessWithCompletion(addressBookRef) { (granted: Bool, error: CFError?) in DispatchQueue.main.async { if let nsError = error as NSError { ... }
ABAddressBookRequestAccessWithCompletion(addressBookRef) { (granted: Bool, error: CFError?) in
DispatchQueue.main.async {
if let nsError = error as NSError {
...
}
}
}
编译器错误为:
无法将强制中类型为“CFError”的值转换为类型为“NSError”
改为:
if let nsError = error as? NSError { ... }
给出警告:
从'CFError'转换为不相关类型'NSError'总是失败
根本不要尝试通过NSError。强迫直接出错,Swift类型
if let err = error as? Error {
print(err) // no problem
}
请原谅我指出这一点,但是ABAddressBook已被弃用。
如果让nsError=error作为错误?{…}
应该可以工作,但我目前无法测试它,正如@matt所说,该API已经被弃用了。@matt仍然支持iOS 8是的,我很担心(@Ramsel我为您提交了一个bug:小注释:如果让err=error作为错误?{…}如果error
不能转换为error?
@MartinR,编译器会抱怨。我能告诉你的是,当传入的error
是可选的CFError时,上面的代码会正确编译并运行。这是最初的问题,所以这就是我解决的问题。是的,我对此毫不怀疑。