Guard Let — Optional-da dəyər olmadıqda funksiyadan erkən çıxış üçün nəzərdə tutulmuş Swift dil konstruksiyasıdır. If let-dən fərqli olaraq, guard let unwrapped dəyişənini orijinal funksiya ilə eyni görünmə sahəsində yaradır və return, break və ya throw vasitəsilə məcburi çıxış tələb edir. Swift.org, 2026-ya görə, guard Optional emalında yuvalanmanı azaltmaq üçün üstünlük verilən üsuldur.
Əsas məqamlar
Guard Let — Optional-ı dəyər üçün yoxlayan Swift konstruksiyası. Əgər dəyər varsa (Optional.some), o çıxarılır (unwrapped) və funksiyanın qalan hissəsində əlçatan olur. Əgər dəyər yoxdursa (Optional.none), cari idarəetmə axınını bitirməli olan else-blok icra olunur.
Guard let-in əsas xüsusiyyəti — unwrapped dəyişəninin görünmə sahəsidir. If let-də dəyişən yalnız fiqurlu mötərizələr daxilində əlçatandırsa, guard let dəyişəni konstruksiyanın özü ilə eyni səviyyədə yaradır. Bu, onu sonra istifadə etməyə, yuvalanmadan imtina etməyə imkan verir.
Guard if let-in əvəzi deyil, nil-in „daha çox icra etmək olmaz" mənasını verdiyi ssenarilər üçün əlavə vasitədir. Bu yanaşma kodu iç-içə else budaqlarından təmizləyərək daha oxunaqlı edən early return (erkən çıxış) prinsipinə uyğundur.
Swift icmasında guard let iOS layihələrinin əksəriyyətində Optional emalı üçün de-fakto standarta çevrilib. Açıq repozitoriyaların təhlili göstərir ki, guard let istehsal kodunda seçimli dəyərləri çıxarmaq üçün if let-dən 3-4 dəfə tez-tez istifadə olunur, çünki o, önşərti açıq şəkildə bildirir və oxuyarkən idrak yükünü azaldır.
Seçimli zəncirlərlə işləyərkən guard let əlavə yoxlamalarla birləşdirilə bilər. Məsələn, guard let data = networkResult, data.count > 0 else { return } həm məlumatın mövcudluğunu, həm də etibarlılığını yoxlayır. Bir guard-da çoxsaylı let sətir sayını azaldır və önşərtləri iç-içə konstruksiyalar olmadan oxunaqlı edir.
Guard let və if let arasında seçim məqsəddən asılıdır: if let hər iki yol (dəyər var / dəyər yoxdur) icranı davam etdirdikdə istifadə olunur. guard let — dəyərin olmaması vaxtından əvvəl bitmə mənasına gəldikdə.
if let dəyər olduqda hərəkət etmək, nil olduqda isə başqa bir şey edib davam etmək üçün istifadə olunur. if let müvəqqəti görünmə sahəsi yaradır və dəyişən yalnız blok daxilində mövcuddur.
guard let giriş məlumatlarının validasiyası üçün tətbiq olunur. Əgər önşərtlərdən biri yerinə yetirilməyibsə (Optional nil-dir) — funksiya xəta ilə bitir. Bu, kodu düz edir: əvvəl yoxlamalar, sonra yuvalanmadan əsas məntiq.
func processUser(id: String?) {
// Guard — nil-də erkən çıxış
guard let userId = id else {
print("İstifadəçi ID-si mövcud deyil")
return
}
// userId burada əlçatandır — yuvalanmadan
fetchProfile(userId: userId)
}
func formatAddress(address: String?) {
// If let — emal və davam
if let valid = address, valid.count > 5 {
displayAddress(valid)
} else {
showPlaceholder()
}
// Unwrapped dəyişəni olmadan davam edirik
}
Swift guard yalnız Optional binding ilə məhdudlaşmır. Guard konstruksiyası ixtiyari Boolean şərtlərini yoxlaya və bir blokda çoxsaylı yoxlamaları birləşdirə bilər.
guard şərt else forması Boolean ifadəsini yoxlayır. Şərt yanlışdırsa — else-blok icra olunur. Bu, önşərtlərin validasiyası üçün əlverişlidir: diapazon, status və ya giriş hüquqlarının yoxlanması.
Guard bir neçə let-binding və Boolean şərtlərini vergül vasitəsilə bir sətirdə birləşdirməyə imkan verir. Bütün yoxlamalar ardıcıl icra olunur; ilk false və ya nil-də else-blok icra olunur. Bu, iç-içə guard bloklarının sayını azaldır.
func updateProfile(
name: String?,
age: Int?,
email: String?
) {
// Bir sətirdə çoxsaylı guard
guard let userName = name,
let userAge = age,
let userEmail = email,
userAge >= 18
else {
print("Yanlış profil məlumatları")
return
}
saveProfile(
name: userName,
age: userAge,
email: userEmail
)
}
Guard let iOS tərtibatçılarının gündəlik təcrübəsinə seçimli dəyərlərin erkən çıxış və kod yuvalanmasının minimallaşdırılması ilə təhlükəsiz çıxarılmasının standart üsulu kimi daxil olub.
Real iOS layihələrində guard let hər yerdə istifadə olunur — delegatlardan JSON parsing-ə qədər. Mobil inkişafda tipik tətbiq ssenarilərinə baxaq.
Cocoa Touch-un tipik nümunəsi: delegatın təyin edilib-edilmədiyini yoxlamaq və onun metodunu çağırmaq. Guard let iç-içə if let-dən azad edir.
[String: Any] lüğətinin əl ilə parsinqi zamanı guard let tiplərin yoxlanması ilə ardıcıl olaraq dəyərləri çıxarır. Sahə yoxdursa və ya tip uyğun gəlmirsə — funksiya nil ilə bitir.
Failable initializer (init?) parametrləri yoxlamaq və düzgün olmayan məlumatlarda nil qaytarmaq üçün guard let istifadə edir.
protocol DataProviderDelegate: AnyObject {
func didReceiveData(_ data: Data)
}
class DataLoader {
weak var delegate: DataProviderDelegate?
func loadData() {
guard let del = delegate else {
return // Deleqat yoxdur — çıxırıq
}
let data = fetchDataFromNetwork()
del.didReceiveData(data)
}
}
// Guard let ilə Failable initializer
struct Config {
let apiURL: URL
let timeout: TimeInterval
init?(dictionary: [String: Any]) {
guard let urlString = dictionary["api_url"] as? String,
let url = URL(string: urlString),
let t = dictionary["timeout"] as? TimeInterval
else {
return nil
}
self.apiURL = url
self.timeout = t
}
}
Bütün nümunələrdə guard let eyni ideyanı nümayiş etdirir: nil olduqda erkən çıxışla təhlükəsiz çıxarma. Bu, UIKit ilə işləyərkən xüsusilə dəyərlidir, çünki bir çox xüsusiyyətlər (tableView.dequeueReusableCell, storyboard instantiate) Optional qaytarır. Guard let crash riski olmadan force unwrap-ı əvəz edir və bir metoddakı çoxsaylı yoxlamalarda oxunaqlılığı qoruyur.
Təcrübəli Swift tərtibatçıları kodu proqnozlaşdırıla bilən və özünü sənədləşdirən edən davamlı guard let istifadə nümunələri hazırlayıblar.
Guard let sadə konstruksiyadır, lakin onun səhv istifadəsi çətin aşkarlanan səhvlərə gətirib çıxarır. Ən çox yayılmış problemlərə baxaq.
Tez-tez verilən suallar
Guard let unwrapped dəyişənini funksiya ilə eyni görünmə sahəsində yaradır və else-blokdan məcburi çıxış tələb edir. If let dəyişəni yalnız öz bloku daxilində yaradır. Guard yuvalanmanı azaldır, if let hər iki ssenarini emal edir.
Bəli, guard ixtiyari Boolean şərtini yoxlaya bilər: guard condition else { return }. Bu, önşərtlərin validasiyası üçün istifadə olunur: indeks, giriş hüquqları və ya vəziyyətin yoxlanması.
Force unwrap (!) Optional nil olduqda runtime xətası atır. Bu, proqramı qeyri-sabit edir. Guard let aşkar çıxışla nil-i təhlükəsiz emal edir, crash-in qarşısını alır və oxunaqlılığı qoruyur.
Kotlin-də guard let-in birbaşa analoqu yoxdur. Ən yaxın konstruksiyalar: ?: return (erkən çıxışlı elvis) və null-da istisna atmaq üçün requireNotNull(). Kotlin yoxlamadan sonra smart cast-a üstünlük verir.
Guard let istənilən Optional ilə işləyir, o cümlədən seçimli zəncirin nəticəsi: guard let value = object?.property?.method() else { return }. Əgər hər hansı bir halqa nil-dirsə — else-blok icra olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun