Я пытаюсь получить мою голову вокруг использования ошибок в стриже, например, у меня есть этот код:Какая польза от ошибок, бросков и улов?
import UIKit
class ViewController: UIViewController {
enum SomeError: Error
{
case badWord
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
do {
try checkWord()
}
catch SomeError.badWord {
print("error!")
}
catch { //This is like a defualt statement
print("Something weird happened")
}
}
func checkWord() throws {
let word = "crap"
guard word != "crap" else {
throw SomeError.badWord
}
print("Continuing the function")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
checkWord
функция прекращается, если слово это плохо. Однако такое же поведение может быть достигнуто с помощью:
func checkWord() {
let word = "crap"
guard word != "crap" else {
print("error!")
return
}
print("Continuing the function")
}
Так в чем же заключается использование определения ошибок и прохождения выписок?
Пособие находится на том месте, где вы вызываете функцию. Хорошим примером является библиотека 'JSONSerialization'. Если вы передадите данные, недопустимые JSON, это приведет к ошибке. В Objective-C вы должны передать указатель ошибки методу, а затем проверить его на наличие ошибки. В Swift метод возвращает правильный результат или генерирует ошибку при сбое. – daltonclaybrook
Вы также считаете, что 'checkWord' может выйти из строя только по одной причине. Часто у вас может быть множество причин, по которым могла быть выбрана ошибка, и, как сказал Мартин, вызывающая процедура может захотеть предпринять разные действия, основанные на типе ошибки. См. [Язык быстрого программирования: обработка ошибок] (https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html#//apple_ref/doc/uid/TP40014097-CH42 -ID508) для более богатого примера. – Rob