Используйте guard let/if let/??/?., failable init, Result/throws; force только в тестах или доказуемых инвариантах рядом с precondition.
Разбор
fatalError/preconditionFailure для настоящих programming errors.
- Не глотайте ошибки пустым
try? без причины.
- UI: показывайте состояние ошибки, а не краш.
- Code review: бан на
! в hot paths без комментария-инварианта.
Итог
Безопасная развёртка и явные ошибки надёжнее скрытых !.