От documentation:
Обработка ошибок
Обработки ошибок является процессом реагирования и восстановления от условий ошибок в программе. Swift предоставляет первоклассную поддержку для метания, ловушки, размножения и управления восстанавливаемыми ошибками во время выполнения.
...
Представляющие и бросание Ошибки
В Swift, ошибки представлены значениями типов, которые соответствуют протокола ErrorType
. Этот пустой протокол указывает, что тип может использовать для обработки ошибок.
(Примечание: ErrorType
был переименован в Error
в Swift 3)
Так с try/catch
вы справляетесь Swift ошибки (значения типов, которые соответствуют протоколу ErrorType
), которые throw
н. Это полностью не связано с ошибками времени выполнения и исключениями времени выполнения (а также не связано с NSException
из библиотеки Foundation).
Обратите внимание, что Swift документация по обработке ошибок, даже не использовать слово «исключение», с единственным исключением в (курсив мой) в (!):
ПРИМЕЧАНИЕ обработки
Ошибка в Swift напоминает обработку исключений в других языках , используя ключевые слова try, catch and throw.В отличие от обработка исключений на многих языках, в том числе Objective-C-error Обработка в Swift не включает в себя разворачивание стека вызовов, процесс , который может быть дорого вычислительным. Как таковые, характеристики характеристик оператора throw сопоставимы характеристикам оператора вывода .
разворачивание из которых являются опции nil
не throw
Свифта ошибки (который может быть размножен) и не может быть обработан с try
.
Вы должны использовать хорошо известные методы, как опционального связывания, опционального сцепление, проверку против nil
и т.д.
Я не уверен, что ошибка при вызове 'throw' (что является причиной того, что ошибки распространяются из-за такой функции) - это то же самое, что происходит, когда вы принудительно разворачиваете' nil'. Кажется, я где-то читал, что он реализован как 'assert()'. –
Это объяснило бы это, но это ужасно. Возможно, для этого есть аргумент, но на языке, который поддерживает исключения, он просто кажется непоследовательным. – Greg
@ Грег: Николя прав. Обратите внимание, что try/catch обрабатывает Swift * errors * (значения, соответствующие «ErrorType», которые выбрасываются). Это * полностью не связано * с ошибками или исключениями времени выполнения. (В документации даже не упоминается слово «исключение» в связи с throw/try/catch, только «Обработка ошибок».) –