ProgramlamaiOS/Swift geliştirici

Swift'te 'ilişkilendirilmiş değerler ile enum' nedir ve bu yapıyı sınıflar veya yapılar yerine ne zaman kullanmalıyız?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Durumları modellemek için (örneğin, yükleme durumu, işlem sonucu: başarı/hata vb.)
  • Bir seçeneğin türden farklı ek parametrelere ihtiyaç duyması durumunda
  • Type-safe kalıplar ve switch dal geçişlerini azaltmak için

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

Kandırmaca soru.

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

Konuyu bilmemekten kaynaklanan gerçek hata örnekleri.


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.