1. ? (Optional – İsteğe Bağlı Değer)
Bir değişkenin değerinin olup olmayabileceğini belirtir. Yani bu değişken nil olabilir.
Örnek:
1 2 |
var name: String? = "Ahmet" print(name) // Optional("Ahmet") |
Burada name değişkeni bir String? (optional string) olarak tanımlandı. İçinde bir değer olabilir veya nil olabilir.
Eğer nil atarsak:
1 2 |
var name: String? = nil print(name) // nil |
Bu durumda değişken boş yani nil olmuş oldu.
2. ! (Force Unwrapping – Zorla Açma)
Eğer ? ile tanımlanan bir optional değişkenden kesinlikle bir değer olduğunu biliyorsak, başına ! koyarak onu açabiliriz.
Örnek (Yanlış Kullanım – Crash Riski Var!)
1 2 |
var name: String? = "Ahmet" print(name!) // Ahmet ✅ |
Burada name! yazarak optional’ı açtık ve değeri doğrudan yazdırdık.
Ama eğer name nil olursa, program çöker ❌:
1 2 |
var name: String? = nil print(name!) // ❌ HATA! Runtime Crash! |
Bu yüzden force unwrapping (!) dikkatli kullanılmalıdır.
3. if let ile Güvenli Açma (Safe Unwrapping)
Eğer bir optional değişkeni güvenli bir şekilde açmak istiyorsak if let kullanabiliriz:
1 2 3 4 5 6 7 |
var name: String? = "Ahmet" if let unwrappedName = name { print(unwrappedName) // Ahmet ✅ } else { print("İsim yok!") } |
Burada:
• if let unwrappedName = name ile name değişkeninin nil olup olmadığını kontrol ediyoruz.
•Eğer nil değilse unwrappedName değişkenine atanıyor ve güvenle kullanabiliyoruz.
4. guard let ile Güvenli Açma
Bir fonksiyonun başında bir optional değişkenin kesinlikle değer almasını sağlamak için guard let kullanılabilir:
1 2 3 4 5 6 7 8 9 10 |
func printName(_ name: String?) { guard let unwrappedName = name else { print("İsim bulunamadı!") // Eğer name nil ise buraya girer return } print(unwrappedName) // Eğer nil değilse burada yazdırılır } printName("Ahmet") // Ahmet ✅ printName(nil) // İsim bulunamadı! ✅ |
5. Nil-Coalescing (?? Operatörü)
Eğer optional bir değişken nil çıkarsa yerine varsayılan bir değer atamak için ?? kullanılır:
1 2 3 4 5 |
var username: String? = nil print(username ?? "Varsayılan Kullanıcı") // Varsayılan Kullanıcı ✅ username = "Mehmet" print(username ?? "Varsayılan Kullanıcı") // Mehmet ✅ |
Burada:
•username nil olduğu zaman “Varsayılan Kullanıcı” yazdırılıyor.
•Eğer username bir değer içeriyorsa, o değer kullanılıyor.
Operatör |
Açıklama |
Örnek |
---|---|---|
? |
Bir değişkenin nil olabileceğini belirtir. |
var name: String? = “Ali” |
! |
Optional değişkenin içinde kesinlikle değer olduğunu düşünerek açar (Risklidir!). |
print(name!) |
if let |
Optional değişkeni güvenli bir şekilde açar. |
if let safeName = name { print(safeName) } |
guard let |
Fonksiyon içinde güvenli açma sağlar, nil durumunda return yapar. |
guard let safeName = name else { return } |
?? |
Optional değişken nil ise, varsayılan bir değer kullanır. |
print(name ?? “Varsayılan İsim”) |
İlk Yorumu Siz Yapın