guard
— это контрольный оператор в Swift, предназначенный для раннего выхода из функции, метода или области видимости при невыполнении условий. В отличие от if
, который проверяет "условие для входа", guard
проверяет "условие для продолжения".
guard условие else {
// Выполняется если условие false
// Должен содержать выход из текущего scope (return, throw, break и т.д.)
return
}
// Дальнейший код выполняется только если условие true
Обязательный выход из scope:
Блок else
должен передавать управление за пределы текущей области видимости
Извлеченные значения доступны после guard:
В отличие от if let
, значения остаются доступны в основной области видимости
Улучшает читаемость: Уменьшает вложенность кода и делает его более линейным
func processUser(name: String?) {
guard let unwrappedName = name else {
print("Name is required")
return
}
// unwrappedName доступен как String (не Optional)
print("Processing user: \(unwrappedName)")
}
func configureView(with model: Model?) {
guard let model = model else { return }
guard model.isValid else { return }
guard !model.items.isEmpty else { return }
// Все проверки пройдены, основной код
updateUI(with: model)
}
guard
let email = user.email,
let password = user.password,
!email.isEmpty,
!password.isEmpty,
password.count >= 8
else {
throw ValidationError.invalidCredentials
}
// Все проверки пройдены
Более чистый код:
if
Яснее выражает намерения:
Безопасность scope:
else
for item in items {
guard item.isActive else { continue }
// Обработка только активных items
process(item)
}
func loadContent() throws {
guard let url = bundle.url(forResource: "data", withExtension: "json") else {
throw ContentError.missingFile
}
// Дальнейшая обработка
}
func performCriticalOperation() {
guard systemReady() else { return }
defer { cleanupResources() }
// Основная операция
executeOperation()
}
guard
— это:
Обязательные требования:
else
должен завершать текущую область видимостиКогда использовать:
Лучшие практики:
guard
guard
if
для проверки ошибокКонструкция guard
— мощный инструмент для написания чистого, безопасного и легко читаемого Swift-кода, который должен быть в арсенале каждого профессионального iOS-разработчика.