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

Как распечатать сведения об исключении "catch all" в Swift?

Я обновляю свой код, чтобы использовать Swift, и мне интересно, как печатать данные об ошибках для исключения, которое соответствует предложению "catch all". Я немного изменил пример этой страницы руководства по быстрому языку, чтобы проиллюстрировать мою точку зрения:

do {
    try vend(itemNamed: "Candy Bar")
    // Enjoy delicious snack
} catch VendingMachineError.InvalidSelection {
    print("Invalid Selection.")
} catch VendingMachineError.OutOfStock {
    print("Out of Stock.")
} catch VendingMachineError.InsufficientFunds(let amountRequired) {
    print("Insufficient funds. Please insert an additional $\(amountRequired).")
} catch {
    // HOW DO I PRINT OUT INFORMATION ABOUT THE ERROR HERE?
}

Если я поймаю неожиданное исключение, мне нужно иметь возможность записывать что-то о том, что вызвало его.

4b9b3361

Ответ 1

Я просто понял это. Я заметил эту строку в Swift Documentation:

Если предложение catch не указывает шаблон, предложение будет соответствовать и связывать любую ошибку с локальной константой с именем error

Итак, я попробовал это:

do {
    try vend(itemNamed: "Candy Bar")
...
} catch {
    print("Error info: \(error)")
}

И это дало мне хорошее описание.

Ответ 2

Из Язык Swift программирования:

Если предложение catch не указывает шаблон, предложение будет соответствовать и связывать любую ошибку с локальной константой с именем error.

То есть в выражении catch есть неявный let error:

do {
    // …
} catch {
    print("caught: \(error)")
}

В качестве альтернативы, кажется, что let constant_name также является допустимым шаблоном, поэтому вы можете использовать его для переименования константы ошибки (это может быть удобно, если имя error уже используется):

do {
    // …
} catch let myError {
   print("caught: \(myError)")
}