Planet Python на русском
Подписаться
Юри Пакасте: Сегодня узнал: Написал Свифт
Автор обнаружил ценную особенность в типизированных исключениях Swift, которая упрощает обработку ошибок. Изначально он находил типизированные исключения очень полезными для конкретных типов ошибок, но столкнулся с проблемой, когда сложные блоки кода заставляли Swift расширять тип ошибки до "any Error". Это означало, что его блок "catch" больше не типизировал ошибку точно, что приводило к проблемам компиляции. Его обходным путем было использование "catch let error as MyError", но это требовало недостижимого блока "catch-all", делая обработку ошибок неполной и вызывая разочарование. Ключевым открытием стала синтаксическая конструкция "do throws(MyError)". Явно объявляя ожидаемый тип ошибки в блоке "do", компилятор Swift сохраняет точную типизацию ошибок. Это элегантное решение предотвращает путаницу компилятора, гарантируя, что блок "catch" корректно обрабатывает указанный тип ошибки. Эта функция улучшает ясность и полноту обработки ошибок при работе с типизированными исключениями в Swift. Упущение автором этой детали в первоначальном предложении по улучшению было значительным промахом. Теперь все хорошо типизировано, как единороги и солнечный свет.