Swift'te switch ve enum yapıları güçlü eşleşme ve katı tip güvenliği ile uygulanır, bu da onları diğer dillerdeki çoğu benzerlerinden ayırır.
C ve C++'ta, ayrıca Objective-C'de, enum'lar yalnızca bir dizi tam sayısal değerden oluşur ve switch operatörleri değerleri eşleşme yoluyla karşılaştırır. Swift'te ise enum'lar (enum) çok daha güçlüdür — ilişkilendirilmiş değerleri, hesaplanan özellikleri ve yöntemleri desteklerler. Switch operatörü, örüntü eşleşmesi, eksik dallandırmalara karşı koruma ve range, tuple, optional gibi birçok işlemi destekler.
Geleneksel dillerde switch sık sık eksiksizliği (tüm durumların kapsanmasını) sağlamakta zorluklar, tip hataları ve enum durumlarında ek verileri güvenli bir biçimde saklayamama gibi hatalara yol açar. Bu, hataların çalıştırma aşamasında, derleme aşamasında değil ortaya çıkmasına neden olur.
Swift'te switch, eğer enum açıkça @unknown default olarak işaretlenmemişse, tüm durumların tam işlenmesini gerektirir. İlişkilendirilmiş değerler, enum durumlarında ek bilgileri zarif bir şekilde saklamaya olanak tanır. Örnek:
enum NetworkResult { case success(Int) case failure(String) } func handle(result: NetworkResult) { switch result { case .success(let code): print("Başarı kodu ile: \(code)") case .failure(let error): print("Hata ile başarısızlık: \(error)") } }
Ana özellikler:
Enum için switch'te her zaman default yazmak gerekli mi?
Hayır, enum'un tüm durumları açıkça kapsanmışsa default gerekmez. Ayrıca, default'ı gereksiz yere kullanmak önerilmez — derleyici, yeni enum durumları eklenirken uyarı vermeyebilir.
Durumlar arasında otomatik geçiş yapmak için fallthrough kullanılabilir mi?
Evet, fallthrough anahtar kelimesi mevcuttur, ancak dikkatli kullanılmalıdır. İlişkilendirilmiş değerleri iletmez ve bu tür geçişler Swift'te gerçek pratikte nadiren görülür.
switch number { case 1: print("bir") fallthrough case 2: print("ya da iki") default: print("diğer") }
Swift'te, ilişkilendirilmiş değerleri olan bir enum, rawValue üzerinden karşılaştırılabilir mi?
Hayır. Sadece ilişkilendirilmiş değerleri olmayan ve açıkça belirtilmiş rawValue'ya sahip olan enum'lar rawValue üzerinden başlatılabilir ve karşılaştırılabilir.
Geliştirici, NetworkResult enum'u için switch'te bir default-case ekledi, bu da yeni bir durum eklendiğinde işleme mantığının güncellenmemesine ve programın "sessizce" hatalı çalışmasına yol açtı.
Artıları: Durum eklerken derleyici uyarıları yok.
Eksileri: Hatalar uygulama çalışırken ortaya çıkıyor, mantık otomatik olarak güncellenmiyor.
Çalışan, enum için switch'de default'ı kullanmaktan vazgeçti, bu da derleyicinin yeni durumları işleme eksikliğini ortaya çıkarmasını sağladı.
Artıları: Hatalar derleme aşamasında tespit ediliyor, uygulamanın davranışı daha öngörülebilir hale geliyor.
Eksileri: Çok sayıda durum varsa daha fazla kod gerektiriyor, ancak güvenilirlikte kazanım sağlıyoruz.