Совместное использование кода обработки исключений для нескольких типов исключений

#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) and Error.type2(value: Int) , вы можете просто написать catch Error.type1 and catch Error.type2 без каких-либо проблем. Однако, когда вы попробуете предложенное || решение, оно больше не будет работать.

4. @Etan, возможно, это не работает, потому is что operator работает с типами, а не со значениями enum . Если вам нужно переключаться между значениями, вы должны использовать что-то вроде catch let error as <your error enum type> { switch error { case … } } .

5. Да, сейчас мы находимся на том же этапе 🙂 Похоже, что пока нет чистого способа перехватить несколько ошибок, когда задействованы связанные значения.