Swift-də Associated Values: nədir, sintaksis və nümunələr

Müəllif: IT Sectr Dərc olunub: 2026-06-17 Oxuma vaxtı: 6 dəq

Associated Values — Swift mexanizmi, hər bir enum variantına fərdi olaraq ixtiyari məlumatları bağlamağa imkan verir. Raw values-dən fərqli olaraq, bütün case-lər eyni tipli dəyərlərə malikdir, associated values isə hər bir case üçün tip və say baxımından fərqlənə bilər. Apple Documentation, 2026 məlumatına görə, bu, əlavə sarma tipləri yaratmadan mövzu sahəsini dəqiq modelləşdirmək üçün əsas imkandır.

Əsas məqamlar

  • Associated Values — enum case-nə bağlanmış fərdi məlumatlar
  • Tiplər associated values hər bir case üçün fərqlənə bilər
  • Çıxarılma switch və ya if case-də dəyər bağlaması vasitəsilə baş verir
  • Qarşılıqlı istisna — associated values raw values ilə uyğun deyil
  • Praktika — səhvlərin, sorğu nəticələrinin və UI hallarının modelləşdirilməsi

Associated Values nədir?

Associated Values — enum case-nin özü ilə birlikdə saxlaya biləcəyi əlavə məlumatdır. Raw values-dən fərqli olaraq, onlar bəyannamə səviyyəsində sabitlənmişdir, associated values isə enum nümunəsi yaradılarkən təyin edilir.

Təsəvvür edin ödəniş metodunun modelləşdirilməsini: creditCard case-i son 4 rəqəmi və bitmə tarixini saxlaya bilər, applePay case-i isə heç nə. Associated values ilə bu, alt siniflər və ya opsional sahələr olmadan təbii şəkildə həyata keçirilir.

Apple sənədləşməsinə görə, associated values enum-u sadə sabitlər dəstindən funksional dillər üçün xarakterik olan cəbri məlumat tipinə (sum type) çevirir. Bu, kodun ifadəliliyini əhəmiyyətli dərəcədə artırır.

Associated values sintaksisi

Associated values case-dən sonra dairəvi mötərizələrdə, funksiyalardakı kimi parametr adları və tipləri göstərilməklə bəyan edilir.

swift
enum MediaFile {
    case image(width: Int, height: Int, format: String)
    case video(duration: Double, codec: String)
    case audio(bitrate: Int)
    case unknown
}

Nümunə yaradılarkən associated values arqumentlər kimi ötürülür:

swift
let photo = MediaFile.image(width: 1920, height: 1080, format: "jpeg")
let clip = MediaFile.video(duration: 120.5, codec: "h264")

Swift associated values sayına və ya tiplərinə heç bir məhdudiyyət qoymur. Siz associated values daxilində dżeneriklərdən, qapanma funksiyalarından və digər enum-lardan istifadə edə bilərsiniz. Bu, mürəkkəb iç-içə strukturlar qurmağa imkan verir.

Associated values parametr adları nümunə yaradılarkən arqument etiketləri kimi istifadə olunur — bu, kodun oxunaqlılığını yaxşılaşdırır. Switch vasitəsilə çıxarılarkən adlar sənədləşmə rolunu oynayır, hər bir dəyərin mənasını izah edir. Belə yanaşma kodu özünü sənədləşdirən edir və məlumatların uyğunlaşdırılması zamanı səhv ehtimalını azaldır. Bu, xüsusilə böyük iOS tətbiqlərinin komanda şəklində inkişafında dəyərlidir.

Associated values ilə Switch

Switch — associated values çıxarmaq üçün əsas üsuldur. Dəyərlər let və ya var vasitəsilə sabitlərə və ya dəyişənlərə bağlanır.

swift
func describe(_ file: MediaFile) -> String {
    switch file {
    case .image(let w, let h, let fmt):
        return "Image \(w)x\(h) .\(fmt)"
    case .video(let duration, let codec):
        return "Video \(duration)s, \(codec)"
    case .audio(let bitrate):
        return "Audio \(bitrate)kbps"
    case .unknown:
        return "Unknown format"
    }
}

Swift qismən uyğunlaşdırmanı dəstəkləyir — associated values-ün konkret dəyərlərini göstərmək olar:

swift
switch file {
case .image(let w, let h, "png"):
    print("PNG şəkli \(w)x\(h)")
case .image(1920, 1080, _):
    print("Full HD şəkli")
default:
    break
}

Wildcard (_) istifadəsi lazımsız associated values-ü gözardı etməyə, case-lərdəki sabitlər isə konkret dəyərlərlə uyğunluğu yoxlamağa imkan verir.

Associated Values vs Raw Values

Bir çox təcrübəsiz tərtibatçı associated values-ü raw values ilə qarışdırır. Bunlar fərqli tətbiq ssenariləri olan fərqli mexanizmlərdir.

XarakteristikaRaw ValuesAssociated Values
Məlumat tipiBütün case-lər üçün bir tipHər case üçün fərqli tiplər
Təyin anıEnum bəyan edilərkənNümunə yaradılarkən
MəcburilikBütün case-lərin dəyəri varBəzi case-lər dəyərsiz ola bilər
UyğunluqQarşılıqlı istisna — eyni anda istifadə etmək olmaz

Swift Evolution-a görə, associated values Swift 2.0-da enum-un yenidən dizaynının bir hissəsi kimi təqdim edilmişdir. Onlar tiplərə cəbri yanaşma təmin edir, burada hər bir case öz imzası olan ayrıca konstruktordur.

Associated values praktik nümunələri

Associated values real iOS layihələrində fəal şəkildə istifadə olunur. Üç tipik ssenarini nəzərdən keçirək.

API cavablarının modelləşdirilməsi

swift
enum APIResponse<T: Codable> {
    case success(data: T, cached: Bool)
    case failure(error: Error, retryAvailable: Bool)
    case loading(progress: Double)
}

UI State Machine

swift
enum ViewState<T> {
    case idle
    case loading(message: String)
    case loaded(data: T)
    case error(message: String, retryAction: () -> Void)
}

Associated values ilə enum güclü alətə çevrilir sonlu avtomatlar üçün: hər case — vəziyyət, associated values — bu vəziyyətin parametrləri. Kompilyator bütün keçidlərin işləndiyinə zəmanət verir.

if case və guard case vasitəsilə çıxarılma

Switch olmadan bir case-i yoxlamaq üçün if case və ya guard case istifadə edin. Bu, yalnız bir variantı emal etmək lazım olduqda daha yığcamdır.

swift
let error = NetworkError.timeout(seconds: 30)

if case .timeout(let seconds) = error {
    print("Sorğu vaxtı bitdi \(seconds)s sonra")
}

guard case .httpError(let code, _) = error else {
    return
}
print("Kod \(code) ilə HTTP xətası")

Tez-tez verilən suallar

Enum parametrsiz associated values malik ola bilərmi?

Bəli, case associated values malik olmaya bilər — məsələn, case unknown. Belə case-lər əlavə məlumat olmadan adi enum case-ləri kimi davranır. Bu, marker halları üçün rahatdır.

Associated values olan iki enum-u necə müqayisə etmək olar?

Swift associated values olan enum üçün Equatable-i avtomatik yaratmır (Swift 4.2+-dək). Equatable-in açıq tətbiqini əlavə edin və ya hər case-i növbə ilə müqayisə etmək üçün switch-dən istifadə edin.

Associated values rekursiv enum-larda istifadə edilə bilərmi?

Bəli, indirect enum-da associated values — ağaclar və əlaqəli siyahılar qurmaq üçün standart üsuldur. Case indirect işarəsi ilə eyni tipdə associated value saxlaya bilər.

Associated values struct-dakı opsional xüsusiyyətlərdən nə ilə fərqlənir?

Associated values tip təhlükəsizdir — hər case yalnız öz məlumatlarına malikdir. Opsionalları olan struct-da hər nümunə bütün sahələri ehtiva edir və nil üçün runtime yoxlamaları tələb olunur.

Associated values Codable dəstəkləyirmi?

Swift associated values olan enum üçün Codable-i avtomatik yaratmır. Custom coding keys istifadə edərək case-lər üzrə switch vasitəsilə encodedecode-un əl ilə tətbiqi tələb olunur.

Nəticə

  • Associated Values — hər bir enum case-nə müxtəlif məlumatların bağlanması mexanizmi
  • Sintaksis — case-dən sonra mötərizələrdə parametrlərin bəyanı, funksiyalardakı kimi
  • Çıxarılma let-bağlaması ilə switch və ya if case vasitəsilə
  • Uyğun deyil raw values ilə — onlardan birini istifadə edin
  • Dżeneriklər associated values daxilində enum-u universal konteynerə çevirir
  • State Machine — iOS-da associated values üçün tipik ssenari

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