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


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

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?
}

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

2 66

2 ответа:

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

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

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

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

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

С Язык Программирования Swift:

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

то есть, есть неявное let error на catch статья:

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

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

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