Swift'teki 'ilişkilendirilmiş değerler ile enum' her bir durumun (farklı türden) bireysel değerleri saklamasına olanak tanır. Bu tür bir enum, aslında bir cebirsel veri tipi (Algebraic Data Type) haline gelir; bu, farklı ek verilerle sonlu bir dizi seçeneği ifade etmek için mükemmel bir yapı sağlar.
Bu yapıyı şu durumlarda kullanın:
Kod örneği:
enum NetworkResult { case success(data: Data) case failure(error: Error) } func handle(result: NetworkResult) { switch result { case .success(let data): print("Veriler alındı: \(data)") case .failure(let error): print("Hata: \(error.localizedDescription)") } }
Enum içinde enum oluşturmak mümkün mü (nested enums), ve bu neden gerekli olabilir?
Cevap: Evet, Swift'te iç içe enumerasyonlar desteklenir. Bu, iç içe durumları modellemek ve kapsam sağlamak için kullanışlıdır. Örneğin:
enum PaymentStatus { enum ErrorType { case declined, timeout } case success(amount: Double) case failure(type: ErrorType) }
Hikaye
Projede, ilişkili değerler ile enum üzerinden karmaşık bir istek durum modeli uygulanmıştı; ancak switch'e yeni durumlar eklenirken default işleme yapılmamıştı. Bu, derleme aşamasında değil, çalışma zamanı aşamasında zor yakalanan sessiz hatalara yol açtı.
Hikaye
Geliştirici, ilişkili değerleri olan enum'u doğrudan JSON'a serileştirmeye çalıştı. Her durum için Codable desteği olmadan, uygulama verileri dekode etme sırasında kaybediyor ve sunucu ile senkronizasyon sırasında kritik hatalara neden oluyordu.
Hikaye
Ağ katmanında hata iletimi için sadece sınıflar kullanıldı, enum kullanılmadı. Bu nedenle hata listesi hızla uzadı, tekrar eden türler ortaya çıktı ve bakım zorluğu oluştu; oysa enum çözümünde hata listesi type-safe ve merkezi olurdu.