#swift #exception #exception-handling #try-catch
#swift #исключение #обработка исключений #попытка-перехват
Вопрос:
В PHP 7.1 представлен способ повторного использования кода обработки исключений для нескольких типов исключений.
https://wiki.php.net/rfc/multiple-catch
<?php
try {
// Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
// Code to handle the exception
} catch (Exception $e) {
// ...
}
Предлагает ли Swift 3 аналогичный способ, например, с помощью предложения where в выражении catch?
Комментарии:
1. Здесь вы можете найти всю необходимую информацию: developer.apple.com/library/content/documentation/Swift /…
2. И мне интересно, где я нашел информацию о предложениях where в выражениях catch…
Ответ №1:
Вы могли бы попробовать это:
catch let error where error is ErrorType1 || error is ErrorType2
Комментарии:
1. Не работает, когда типы ошибок имеют связанные значения.
2. @Etan, и как ты представлял себе получение связанного значения с помощью
one of this types in the list
объявления типа? В этом случае вы должны использовать отдельный catch для типа.3. Случай перечисления имеет связанные значения, но во время перехвата я бы хотел их отбросить. Предполагая, что это
Error.type1(value: Int)
andError.type2(value: Int)
, вы можете просто написатьcatch Error.type1
andcatch Error.type2
без каких-либо проблем. Однако, когда вы попробуете предложенное||
решение, оно больше не будет работать.4. @Etan, возможно, это не работает, потому
is
что operator работает с типами, а не со значениями enum . Если вам нужно переключаться между значениями, вы должны использовать что-то вродеcatch let error as <your error enum type> { switch error { case … } }
.5. Да, сейчас мы находимся на том же этапе 🙂 Похоже, что пока нет чистого способа перехватить несколько ошибок, когда задействованы связанные значения.