2016-03-14 2 views
1

Swift предлагает возможности обработки исключений, которые полезны в ситуациях, когда ошибки не контролируются программистом (отсутствующие файлы, сброшенные соединения и т. Д.). Хотя я мог бы использовать один и тот же механизм для сообщения ситуаций, вызванных ошибками программиста (индекс за пределами границ, ошибки диапазона и т. Д.). Мне интересно, является ли это предполагаемым способом использования исключений.Условия работы, вызванные ошибками программиста в Swift

В коде Objective-C общий способ справиться с этими ситуациями был через утверждения. С другой стороны, использование исключений было несколько обескуражено в Objective-C, поэтому здесь не может быть замены «один-к-одному».

Аналогично, на Java есть проверенные и непроверенные исключения, с намерением использовать непроверенные для ошибок программиста.

Мое понимание заключается в том, что среди исключений в Свифте нет проверочных/непроверенных различий. Я хотел бы узнать, является ли использование исключений или утверждений правильным способом сообщить ошибки программиста в Swift, или если я должен использовать какой-то другой механизм?

ответ

1

Несмотря на аналогичный синтаксис обработки исключений Java, Swift do/catch предназначен для обработки ошибок. Другими словами, Swift не поддерживает обработку исключений.

См. this question за некоторыми отличиями между обработкой исключений Java и обработкой ошибок Swift. Дополнительный элемент, который нужно добавить к ответу, заключается в том, что обработка ошибок Swift не обеспечивает разворачивание стека.

do/catch предназначен для обработки возвратных ошибок; assert и precondition предназначены для обработки неисправимых ошибок программиста.

See here для обсуждения и цитаты из Dave Abrahams о том, когда следует использовать assert vs precondition.

+0

Спасибо! Я думаю, что короткий ответ - «использовать предварительные условия». – dasblinkenlight

+0

Всё зависит от меня. Если вы пытаетесь определить и удалить ошибки программиста во время процесса сборки, используйте 'assert', который поможет вам определить, когда условия не выполняются в отладочных сборках. Если, например, вы пишете фреймворк и хотите защитить от неустранимых нарушений какого-либо условия в сборках релизов, используйте «precondition». –

Смежные вопросы