Метод run
, который вы вызываете, может вызвать исключение, но закрытие действия предупреждения не ожидает возникновения исключения. Вы должны обработать исключение, потому что действие предупреждения не настроено, чтобы исключение всплыло. Когда вы добавляете! в попытке вы говорите: «сделайте это, и если произойдет исключение, завершите работу приложения». Другая альтернатива - заключить его в блок do-catch:
do {
try self.myData.run(badgeOutUpdate)
} catch {
// Handle the exception here
}
Если возникнет исключение, он выполнит блок catch. Если нет, улов будет игнорироваться. Другой вариант - использовать следующее:
try? self.myData.run(badgeOutUpdate)
Это выполнит вызов, который может бросить. Если этот вызов вызывает исключение, он молча завершается неудачно, и ваша программа продолжается. В некоторых случаях это может быть хорошо, или это может означать, что в вашей программе больше ничего не будет работать.
Каждая ситуация индивидуальна, выберите наиболее подходящую для вас: аварийное завершение при исключении, обработка исключения, тихая ошибка.
Документация Swift довольно хорошо описывает это: https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html