Swift'te Associated Values: Nedir, Sözdizimi ve Örnekler

Yazar: IT Sectr Yayınlanma: 2026-06-17 Okuma süresi: 6 dk

Associated Values — her bir enum durumuna ayrı ayrı rastgele veri eklemeye izin veren bir Swift mekanizması. Tüm durumların aynı türde değerlere sahip olduğu raw values'ın aksine, associated values her durum için tür ve miktar olarak farklılık gösterebilir. Apple Documentation, 2026'ya göre, bu, ek sarmalayıcı türler oluşturmadan bir alanı doğru bir şekilde modellemek için önemli bir yetenektir.

Önemli Noktalar

  • Associated Values — bir enum durumuna eklenmiş bireysel veriler
  • Türleri her durum için farklılık gösterebilir
  • Çıkarma switch veya if case'de değer bağlama yoluyla yapılır
  • Karşılıklı Dışlama — associated values, raw values ile uyumsuzdur
  • Pratik — hatalar, sorgu sonuçları ve UI durumlarını modelleme

Associated Values Nedir?

Associated Values, bir enum durumunun kendisiyle birlikte saklayabileceği ek bilgilerdir. Bildirim düzeyinde sabit olan raw values'ın aksine, associated values bir enum örneği oluşturulurken ayarlanır.

Bir ödeme yöntemini modellediğinizi hayal edin: creditCard durumu son 4 haneyi ve son kullanma tarihini saklayabilirken, applePay durumu hiçbir şey saklamaz. Associated values ile bu, alt sınıflar veya isteğe bağlı alanlar olmadan doğal bir şekilde uygulanır.

Apple dokümantasyonuna göre, associated values, enum'u basit bir sabitler kümesinden işlevsel dillere özgü cebirsel bir veri türüne (sum type) dönüştürür. Bu, kod ifade gücünü önemli ölçüde artırır.

Associated values sözdizimi

Associated Values, işlevlerde olduğu gibi, durumdan sonra parantez içinde parametre adları ve türleri belirtilerek bildirilir.

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

Bir örnek oluşturulurken, associated values argümanlar olarak iletilir:

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

Swift, associated values'ın sayısı veya türleri üzerinde kısıtlama getirmez. Associated values içinde generics, closure işlevleri ve diğer enum'ları kullanabilirsiniz. Bu, karmaşık iç içe yapılar oluşturmayı mümkün kılar.

Associated values parametre adları, bir örnek oluşturulurken argüman etiketleri olarak kullanılır — bu, kod okunabilirliğini artırır. Switch ile çıkarım sırasında adlar, her değerin anlamını netleştirerek dokümantasyon görevi görür. Bu yaklaşım, kodu kendi kendini belgeleyen hale getirir ve veri eşleştirme sırasında hata olasılığını azaltır. Bu, büyük iOS uygulamalarının takım geliştirmesinde özellikle değerlidir.

Switch ile associated values

Switch, associated values'ı çıkarmanın birincil yoludur. Değerler, let veya var aracılığıyla sabitlere veya değişkenlere 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 kısmi eşleme destekler — associated values için somut değerler belirtebilirsiniz:

swift
switch file {
case .image(let w, let h, "png"):
    print("PNG görüntüsü \(w)x\(h)")
case .image(1920, 1080, _):
    print("Full HD görüntü")
default:
    break
}

Joker karakter (_) kullanmak gereksiz associated values'ı yok saymaya olanak tanır ve durumlardaki sabitler, belirli değerlerle eşleşmeyi kontrol etmenizi sağlar.

Associated Values vs Raw Values

Birçok acemi geliştirici associated values ile raw values'ı karıştırır. Bunlar farklı kullanım durumlarına sahip farklı mekanizmalardır.

ÖzellikRaw ValuesAssociated Values
Veri TürüTüm durumlar için tek türHer durum için farklı türler
Atama ZamanıEnum bildirimindeÖrnek oluşturulurken
ZorunlulukTüm durumların bir değeri vardırBazı durumlar değersiz olabilir
UyumlulukKarşılıklı dışlayıcı — aynı anda kullanılamaz

Swift Evolution'a göre, associated values, enum yeniden tasarımının bir parçası olarak Swift 2.0'da tanıtılmıştır. Her durumun kendi imzasına sahip ayrı bir kurucu olduğu türlere cebirsel bir yaklaşım sağlarlar.

Associated values pratik örnekleri

Associated Values, gerçek iOS projelerinde aktif olarak kullanılır. Üç tipik senaryoyu inceleyelim.

API yanıtlarını modelleme

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

UI Durum Makinesi

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

Associated values ile enum, durum makineleri için güçlü bir araç haline gelir: her durum bir durumdur, associated values bu durumun parametreleridir. Derleyici, tüm geçişlerin işlendiğini garanti eder.

if case ve guard case ile çıkarma

Switch olmadan tek bir durumu kontrol etmek için if case veya guard case kullanın. Yalnızca bir seçeneği işlemeniz gerektiğinde bu daha derli topludur.

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

if case .timeout(let seconds) = error {
    print("\(seconds)s sonra istek zaman aşımına uğradı")
}

guard case .httpError(let code, _) = error else {
    return
}
print("\(code) kodlu HTTP hatası")

Sıkça Sorulan Sorular

Bir enum, parametresiz associated values'a sahip olabilir mi?

Evet, bir durum associated values'a sahip olmayabilir — örneğin, case unknown. Bu tür durumlar, ek veri olmadan normal enum durumları gibi davranır. Bu, işaretleyici durumlar için uygundur.

Associated values'a sahip iki enum nasıl karşılaştırılır?

Swift, associated values'a sahip enum'lar için otomatik olarak Equatable oluşturmaz (Swift 4.2+ öncesi). Açık bir Equatable uygulaması ekleyin veya her durumu sırayla karşılaştırmak için switch kullanın.

Özyinelemeli enum'larda associated values kullanılabilir mi?

Evet, indirect enum'larda associated values, ağaçlar ve bağlı listeler oluşturmak için standart bir tekniktir. Bir durum, indirect ile işaretlenmiş aynı türde bir associated value içerebilir.

Associated values, struct'taki isteğe bağlı özelliklerden nasıl farklıdır?

Associated Values tür güvenlidir — her durum yalnızca kendi verilerine sahip olmayı garanti eder. İsteğe bağlı özelliklere sahip bir struct'ta, her örnek tüm alanları içerir ve çalışma zamanı nil kontrolleri gerekir.

Associated values, Codable'ı destekler mi?

Swift, associated values'a sahip enum'lar için otomatik olarak Codable oluşturmaz. Özel kodlama anahtarları kullanarak durumlar üzerinde switch aracılığıyla manuel encode ve decode uygulaması gerekir.

Özet

  • Associated Values — her enum durumuna farklı veriler ekleme mekanizması
  • Sözdizimi — işlevler gibi durumdan sonra parantez içinde parametre bildirimi
  • Çıkarma — let bağlama veya if case ile switch aracılığıyla
  • Uyumsuz raw values ile — yalnızca birini kullanın
  • Generics associated values'da enum'u evrensel bir kapsayıcı yapar
  • Durum Makinesi — iOS'ta associated values için tipik bir senaryo

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun