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

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

Вам также может понравиться

About the Author: qw

1 комментарий

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

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

    попробовать

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

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

    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?, обратите внимание, что вы отбрасываете ошибку, которая произошла, поскольку ее перевод на нуль.
    Использовать попробовать? когда вы фокусируетесь больше на успехах и неудачах, а не на том, почему что-то не удалось.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *