попробуйте, попробуйте! & пытаться? какая разница, и когда использовать их?

В Swift 2.0 Apple представила новый способ обработки ошибок (do-try-catch). И несколько дней назад в Beta 6 было введено еще более новое ключевое слово ( try? ). Кроме того, я знал, что могу использовать try! , В чем разница между тремя ключевыми словами и когда их использовать?

Предположим, что следующая функция бросания:

 enum ThrowableError : ErrorType { case BadError } func doSomething() throws -> String { if everythingIsFine { return "Everything is ok" } else { throw ThrowableError.BadError } } 

пытаться

У вас есть 2 варианта, когда вы пытаетесь вызвать функцию, которая может бросить.

Вы можете взять на себя ответственность за обработку ошибок , окружив свой вызов в блоке блокировки:

 do { let result = try doSomething() } catch { // Here you know about the error // Feel free to handle to re-throw } 

Или просто попробуйте вызвать функцию и передать ошибку следующему вызывающему абоненту в цепочке вызовов:

 func doSomeOtherThing() throws -> Void { // Not within a do-catch block. // Any errors will be re-thrown to callers. let result = try doSomething() } 

пытаться!

Что происходит, когда вы пытаетесь получить доступ к неявно разворачиваемому дополнительно с нулем внутри него? Да, правда, приложение будет CRASH! То же самое происходит с попыткой! он в основном игнорирует цепочку ошибок и объявляет ситуацию «делать или умереть». Если вызываемая функция не выдавала никаких ошибок, все идет хорошо. Но если он не удался и выбросил ошибку, ваше приложение просто потерпит крах .

 let result = try! doSomething() // if an error was thrown, CRASH! 

пытаться?

Новое ключевое слово, которое было введено в Xcode 7 beta 6. Оно возвращает необязательный, который разворачивает успешные значения и улавливает ошибку, возвращая нуль.

 if let result = try? doSomething() { // doSomething succeeded, and result is unwrapped. } else { // Ouch, doSomething() threw an error. } 

Или мы можем использовать новое потрясающее ключевое слово guard:

 guard let result = try? doSomething() else { // Ouch, doSomething() threw an error. } // doSomething succeeded, and result is unwrapped. 

Одна заключительная записка здесь, используя try? обратите внимание, что вы отбрасываете ошибку, которая произошла, поскольку она переводится в нуль. Использовать попробовать? когда вы больше сосредотачиваетесь на успехах и неудачах, а не на том, почему все не удалось.

  • Как сказать, чтобы проигнорировать ошибку и обработать следующую вещь в списке?
  • Подробное сообщение об ошибке 500, ASP + IIS 7.5
  • Обработка ошибок в математических функциях
  • Обработка ошибок в Swift-Language
  • На каких платформах целое деление на ноль запускает исключение с плавающей запятой?
  • Простая обработка ошибок VBA Excel
  • Развертывание веб-сайта: 500 - Внутренняя ошибка сервера
  • Функция преобразования для проверки ошибок считается хорошей?
  • целочисленная проверка ввода, как?
  • Давайте будем гением компьютера.