2016-11-14 52 views
2

工作我們的代碼庫轉換爲斯威夫特3,我有這樣的問題:免費橋接至NSError不是斯威夫特3

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

      if let nsError = error as NSError { 
       ... 
      } 
     } 
} 

編譯器錯誤是: Cannot convert value of type 'CFError?' to type 'NSError' in coercion


更改爲:

if let nsError = error as? NSError { ... } 

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

+0

請原諒我指出這一點,但ABAddressBook已棄用。 – matt

+1

'如果讓nsError =錯誤爲錯誤? {...}'應該可以工作,但我目前無法測試它,並且正如@matt所說的那樣,反正這個API已經被棄用了。 –

+0

@matt仍然支持iOS 8 – Ramsel

回答

5

不要嘗試通過NSError。直接輸入Error,Swift類型。

if let err = error as? Error { 
    print(err) // no problem 
} 
+0

小備註:用'if let err = error as Error?{.. 。}如果'error'不能轉換成'Error?',編譯器會報錯。 –

+0

@MartinR我可以告訴你的是,當傳入的'error'是一個Optional CFError時,上面的代碼編譯和運行正確。原來的問題,所以這就是我解決的問題。 – matt

+0

是的,我沒有懷疑這一點。 –