Есть ли способ уловить утверждения в Свифт?

Кажется, что 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 для исключительных вещей, которые может обрабатывать ваш код.