Когда анонсировали Swift, я несказанно обрадовался, что он унаследовал от Objective-C философию работы с исключениями - исключения не должны использоваться для контроля выполнения программной логики, а только для сообщения о критических ошибках во время разработки
Поэтому я был удивлен, когда узнал, что в Swift 2 добавили традиционную схему обработки исключений.
Похожим образом были удивлены функицональные Swift программисты, которые обрели свою веру в Haskell-стиле обработки ошибок, где каждая функция возвращает enum (или monad, если желаете), содержащий валидный результат или ошибку. Это выглядело лаконичным решением для Swift 1.x, так почему же Apple сделала выбор в пользу решения, предназначенного для неуклюжих императивных языков?
Я собираюсь разобраться в 3 вопросах в этом посте: