Guard Let: Swift-də əsaslar, sintaksis və tətbiq

Müəllif: IT Sectr Dərc olunub: 2026-05-26 Oxuma vaxtı: 8 dəq

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-da nil olduqda funksiyadan erkən çıxış üçün Swift konstruksiyası.
  • Unwrapped dəyişəni guard let-dən sonra bütün qalan funksiya daxilində əlçatandır, təkcə blok daxilində deyil.
  • Məcburi çıxış — guard else-blokda return, break, continue və ya throw tələb edir, əks halda kod kompilyasiya olunmur.
  • Yuvalanmanın azaldılması — guard let iç-içə if let piramidalarını əvəz edərək əsas icra axınını düz edir.
  • Şərtlərin yoxlanması — guard (letsiz) ixtiyari Boolean şərtlərini yoxlaya bilər, təkcə Optional deyil.

Guard Let nədir?

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: nə vaxt nəyi istifadə etməli

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: Optional-ın iki yoldan birində emalı

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: önşərtlərin yoxlanması

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.

swift
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
}

Guard Boolean şərtləri və çoxsaylı yoxlamalarla

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.

Şərtlə guard

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ı.

Çoxsaylı let və şərtlər

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.

swift
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
    )
}

iOS inkişafında Guard Let: praktik nümunələr

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.

Delegatın yoxlanması

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.

JSON-dan məlumatın çıxarılması

[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.

Yoxlama ilə inisializasiya

Failable initializer (init?) parametrləri yoxlamaq və düzgün olmayan məlumatlarda nil qaytarmaq üçün guard let istifadə edir.

swift
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.

Swift-də Guard Let istifadə nümunələri

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.

  • Funksiyanın əvvəlində validasiya — bütün guard let-lər əvvəldə yerləşdirilərək önşərtlər bölməsini təşkil edir. Əsas məntiq yuvalanmadan yoxlamalardan sonra gəlir.
  • Guard + map — map vasitəsilə Optional transformasiyası ilə guard let dəyəri bir addımda çıxarmağa və çevirməyə imkan verir.
  • Dövrdə guard — for-in daxilində guard let nil elementlərini buraxır, else-blokda isə continue növbəti iterasiyaya keçir.
  • Throw ilə guard — throwing funksiyalarında guard let nil olduqda xəta atır, bu da return nil ilə else budaqları olmadan təmiz axın verir.

Guard Let ilə işdə tipik səhvlər

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.

  • Unudulmuş return və ya throw — Swift kompilyatoru else-blokdan məcburi çıxış tələb edir. Return olmadan kod kompilyasiya olunmur ki, bu da təsadüfi davam etməni istisna edir.
  • Else-də yan təsirlər — guard-ın else-bloku yalnız çıxış üçün nəzərdə tutulub. Xətanın emal məntiqi (loglama, xəbərdarlıq) return-dan əvvəl olmalıdır.
  • Continue olmadan dövrdə guard let — dövr daxilində guard continue ilə bitməlidir, return ilə deyil, əks halda dövr tamamilə kəsiləcək.
  • Həddindən artıq guard istifadəsi — şərt önşərt deyilsə (xəta gözlənilən ssenaridir), guard yox, if let istifadə edin. Guard „nil varsa — bu səhv və ya istisna halıdır" mənasını verir.

Tez-tez verilən suallar

Guard let Swift-də if let-dən nə ilə fərqlənir?

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.

Guard let-siz istifadə edilə bilərmi?

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ı.

Guard let əvəzinə force unwrap edildikdə nə baş verir?

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 analoqu varmı?

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.

Seçimli zəncirlərlə guard let necə istifadə olunur?

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ə

  • Guard let — Optional-da nil olduqda funksiya səviyyəsində unwrapped dəyişəninə girişlə erkən çıxış üçün Swift konstruksiyası.
  • If let-dən fərqli olaraq, guard let else-blokda məcburi çıxış (return, throw, break) tələb edir və kodu yuvalanmadan düz edir.
  • Bir guard sətirində çoxsaylı yoxlamalar iç-içə blokların sayını azaldır və önşərtlərin oxunaqlılığını yaxşılaşdırır.
  • Guard let iOS inkişafı üçün standart nümunədir: delegatın yoxlanması, JSON parsing, parametr validasiyası və failable initializer.
  • Letsiz guard Boolean şərtlərini yoxlayır ki, bu da diapazonların, statusların və giriş hüquqlarının validasiyası üçün əlverişlidir.
  • Guard let əvəzinə force unwrap-dan, else-blokda yan təsirlərdən və nil-in gözlənilən davranış olduğu ssenarilərdə guard istifadəsindən çəkinin.

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.

Layihəni müzakirə et

Həm də oxuyun