Bir Optional, ya bir değer tutan ya da nil (değer yok) tutan bir tiptir. Swift, nil'i tip sisteminde açık hâle getirir: String asla nil olamaz, ama olabilir. Swift, çoğu null-pointer çökmesini derleme zamanında bu şekilde ortadan kaldırır.
Bir Optional, ya bir değer tutan ya da nil (değer yok) tutan bir tiptir. Swift, nil'i tip sisteminde açık hâle getirir: String asla nil olamaz, ama olabilir. Swift, çoğu null-pointer çökmesini derleme zamanında bu şekilde ortadan kaldırır.
String?Arka planda Int?, iki durumu olan bir enum'dur: .some(value) veya .none. Sarmalanmış değeri doğrudan kullanamazsınız — önce onu açmanız (unwrap) gerekir.
var name: String? = "Ada" // Optional String, şu anda .some("Ada")
var missing: String? = nil // .none
// if let: yalnızca nil değilken bağla, bloğa özel kapsam
if let name = name {
print(name.count) // güvenli: burada name düz bir String
}
// guard let: aç ya da erken çık — mutlu yolu iç içe geçmeden tutar
func greet(_ input: String?) {
guard let input else { return } // Swift 5.7 kısa yazımı
print("Hi \(input)") // aşağıda input non-optional
}
// nil-coalescing: bir varsayılan sağla
let display = name ?? "Anonymous"
! operatörü zorla açar: name!, eğer name nil ise çöker. Bunu yalnızca bir değer program mantığıyla garanti edildiğinde kullanın — aksi hâlde if let, guard let veya ?? tercih edin.
let url = URL(string: "https://a.com")! // TAMAM: literal her zaman geçerli
let user = fetchUser()! // KÖTÜ: nil'de çöker
String!), nil iken erişildiğinde sessizce çöker — @IBOutlet ile yaygındır.user?.address?.city, çökmek yerine nil'e kısa devre yapar.Optional'lar "bu yok olabilir" bilgisini tipte kodlar, böylece derleyici sizi boş durumu ele almaya zorlar. Görüşmeciler bunu, her yere ! serpiştirmek yerine guard let ve ?? kullanıp kullanmadığınızı görmek için kullanır; bu, çökmeye eğilimli bir uygulama ile güvenli bir uygulama arasındaki farktır.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap