2016-11-14 13 views
2

Преобразование нашего кодовую Свифта 3, у меня есть эта проблема:звонок бесплатный мостиковой CFError в NSError не работает в Swift 3

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

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

Compiler ошибки: 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

'if let nsError = error as Error? {...} 'должен работать, но я не могу протестировать его в настоящее время, и, как сказал @matt, этот API устарел в любом случае. –

+0

@matt все еще поддерживает iOS 8 – Ramsel

ответ

5

Не пытайтесь пройти через NSError вообще. Поверните прямо к ошибке, тип Swift.

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

Незначительное замечание: с 'if let err = error as Error? {.. .} 'компилятор будет жаловаться, если' error' не конвертируется в 'Error?'. –

+0

@MartinR Все, что я могу вам сказать, это то, что приведенный выше код компилируется и работает правильно, когда входящая 'ошибка' является необязательным CFError. оригинальная проблема, так что я решил проблему. – matt

+0

Да, я не сомневался в этом. –