Ответ 1
Ошибка соединяется с NSError таким же образом, что String является мостом для NSString. I.e(ошибка как NSError) будет работать.
if (error as NSError).code == NSURLErrorCancelled {
// code
}
Кажется, что при преобразовании нашего старого кода в бета-версию 4 я продолжаю отличать ошибку от NSError. Иногда это может привести к предупреждению, что "условный перевод с" Ошибка "на" NSError "всегда преуспевает". Я чувствую, что не понимаю, как лучше использовать Error. Я хочу, чтобы подумать, как error.code, error.localizedDescription... Есть ли хорошая документация или учебники, объясняющие эти ошибки?
Например:
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
Сейчас я делаю что-то вроде:
if let error = error as? NSError {
if error.code == NSURLErrorCancelled {
Но это дает предупреждение "Условный перевод с" Ошибка "на" NSError "всегда преуспевает"
Ошибка соединяется с NSError таким же образом, что String является мостом для NSString. I.e(ошибка как NSError) будет работать.
if (error as NSError).code == NSURLErrorCancelled {
// code
}
Сделайте это:
Swift 3.0 и Swift 4.0
if error._code == NSURLErrorCancelled { }
Ошибка захвата в Swift 3 изменилась. Найдите NSError в Примечания к выпуску. Цитата:
Кроме того, типы ошибок, импортированные из Cocoa и Cocoa Touch, сохраняют всю информацию в соответствующем
NSError
, поэтому больше не нужноcatch let as NSError
извлекать (например) словарь пользовательской информации, Конкретные типы ошибок также содержат типизированные аксессоры для их общих ключей пользовательской информации. Например:
do {
let regex = try NSRegularExpression(pattern: "(", options: [])
} catch {
// error is of type NSError already
print(error.localizedDescription)
}