Optional — Swift'te bir T tipinde değer içerebilen veya hiç değer içermeyen (nil) özel bir türdür. T? olarak yazılır. Değişkenin değer içermeyebileceğini açıkça belirtmeyi sağlar ve derleme aşamasında değer kontrolü garantiler.
Değer çıkarma mekanizmaları:
let str: String? = "merhaba" if let s = str { print(s) }
guard let s = str else { return } print(s)
let s = str!
(MAY cause runtime crash if value is nil)
let length = str?.count
??):let value = str ?? "varsayılan"
String türündeki bir değişkene nil atamak mümkün mü ve ne olur?
Cevap:
Hayır, sıradan türdeki bir değişkene (String) nil atamak mümkün değildir. Sadece optional nil olabilir, aksi takdirde derleme hatası oluşur.
Örnek:
var a: String // a = nil // derleme hatası: Nil cannot be assigned to type 'String' var b: String? b = nil // TAMAM
Hikaye
Uygulamada, veritabanından her zaman doğru cevap geleceğini varsayarak değer üzerinde force unwrapping yapıldığında, alan yoksa çökme meydana geliyordu. Hata, optional binding ile ek kontrol eklenerek çözüldü.
Hikaye
Push bildirimleri gönderilirken kullanıcı adı non-optional bir değişkende saklandığı için API'den boş isim geldiğinde uygulama çöküyordu. Analiz sonucunda tür optional olarak değiştirildi, nil işleme eklendi.
Hikaye
Projede optional bir değerin bir fonksiyona geçirilmesi sırasında, argüman optional türde olmadan ilan edilmişti. Gizli hatalar ve çökme meydana geldi. Değişiklik yapıldı: parametre türü optional oldu, değer kontrolü eklendi.