Есть ли способ уловить утверждения в Свифт?
Кажется, что Swift не имеет С#/Java-подобных исключений и вместо этого использует утверждения. Однако в книге говорится, что в производственной среде они мгновенно разбивают приложение. Разве нет пути вокруг него? Что относительно модульных тестов, как я могу проверить, что определенная функция утверждает, что она получает правильное входное значение?
Ответы
Ответ 1
Из книг Apple, Swift Язык программирования кажется, что erros должен обрабатываться с использованием перечисления.
Вот пример из книги.
enum ServerResponse {
case Result(String, String)
case Error(String)
}
let success = ServerResponse.Result("6:00 am", "8:09 pm")
let failure = ServerResponse.Error("Out of cheese.")
switch success {
case let .Result(sunrise, sunset):
let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)."
case let .Error(error):
let serverResponse = "Failure... \(error)"
}
От: Apple Inc. "Быстрый язык программирования". интерактивные книги. https://itun.es/br/jEUH0.l
Для неожиданных эрров вы должны использовать NSException как пункт lfalin
Ответ 2
Как вы уже упоминали, утверждения отложат ваше приложение в отладке или производстве. Они не предназначены для работы как исключения Java/С#. Их единственная реальная цель:
Использовать утверждение всякий раз, когда условие имеет потенциал быть ложным, но обязательно должно быть правдой, чтобы ваш код продолжался выполнение.... в ситуациях, когда возможны недействительные условия, утверждение является эффективным способом обеспечения того, чтобы такие условия были во время разработки, перед публикацией вашего приложения.
Поскольку вы можете использовать классы Cocoa в Swift, вы все еще можете использовать NSException
для исключительных вещей, которые может обрабатывать ваш код.
Ответ 3
Вы можете добавить поддержку try-catch для Swift, следуя инструкциям в этой статье: https://medium.com/@_willfalcon/adding-try-catch-to-swift-71ab27bcb5b8
В принципе, это оболочка вокруг try-catch Obj-C