Подтвердить что ты не робот

Обращение с пробкой и броски в Swift 3

Перед тем, как Swift 3 я использовал:

guard let data = Data(contentsOf: url) else {
                print("There was an error!)
                return
            }

Однако теперь мне нужно использовать do, try и catch. Я не знаком с этим синтаксисом. Как бы я воспроизвел это поведение?

4b9b3361

Ответ 1

Разница здесь в том, что Data(contentsOf: url) больше не возвращает Необязательный, он бросает.

Итак, вы можете использовать его в Do-Catch, но без guard:

do {
    let data = try Data(contentsOf: url)
    // do something with data
    // if the call fails, the catch block is executed
} catch {
    print(error.localizedDescription)
}

Обратите внимание, что вы все равно можете использовать guard с try? вместо try, но тогда возможное сообщение об ошибке игнорируется. В этом случае вам не нужен блок Do-Catch:

guard let data = try? Data(contentsOf: url) else {
    print("There was an error!")
    // return or break
}
// do something with data

Ответ 2

Отключение распространения ошибок

Иногда вы знаете, что бросающая функция или метод не выдают ошибку во время выполнения. В этих случаях вы можете написать попробовать! перед выражением отключить распространение ошибок и обернуть вызов в утверждение времени выполнения, что не будет выдано никакой ошибки. Если на самом деле выдается ошибка, вы получите ошибку времени выполнения.

let data = try! Data(contentsOf: url)

Подробнее здесь