Swift Optional’lar
Optional’lar bir değerin varlığını kontrol eden tiplerdir. Yani, optional olarak bir değişken tanımladığımızda bu, değişkenin bir x değerine eşit olabileceği veya değer almayabileceği yani nil olabileceği anlamını taşır.
Örnek:var optionalInt: Int?
var optionalStr: String?
Optional’lar başlangıç değeri alabilir. Fakat output da optional olacaktır.
Örnek:var kesmeSeker: Int? = 2
print(kesmeSeker)Output:
Optional(2)
Optional değerleri aşağıdaki gibi kontrol edebiliriz.
var deger: Int?if deger != nil {
print(deger)
} else {
print(“Değer nil’e eşit :(“)
}
Peki optional bir değeri nasıl Int, String gibi tanımlamak istediğimiz tiplere dönüştüreceğiz şimdi ona değinelim.
Force Unwrapping
Optinal değişkenleri unwrap ederek kendi tiplerine döndürebiliriz. Bunu yapmamız için değişkenin yanına ! koyarız.
Örnek:var alternatifRenk: String? = “kırmızı”print(“Alternatif olarak \(alternatifRenk!) rengi seçtiniz.”) //Alternatif olarak kırmızı rengi seçtiniz.
Yukardıda görüldüğü üzere String? tipini force unwrapping ile String’e dönüştürmüş olduk. Force unwrapping yaparken değişkenin bir değere atanacağından emin olmamız gerekir. Aksi taktirde hata alma olasılığımız olduğundan mümkün olduğunca kullanılmamalıdır.
Dolaylı Olarak Unwrap Edilmiş Optional’lar
Optional bir değişkeni tanımlarken unrwrap edip nil olmayacağını garantileyebilir ve ileriki adımlarda ! kullanmadan yolumuza devam edebiliriz.
Örnek:// Diyelim ki bir şeker için ana renk seçimi var ve şeker renksiz olmayacak. Burada renk değişkeni nil olarak gelirse direkman hata alırız. Unwrapping ile uğraşmadan ilerleyebiliriz.
var renk: String!
renk = “kırmızı”print(“Seçtiğiniz şeker \(renk) renk!”) //Seçtiğiniz şeker kırmızı renk!
Optional Binding
Optional’ları kullanmanın en güvenli ve stabil yolu optional binding’dir. Temel taslak şu şekildedir.
if let sabit = optionalDegisken {
//optional degisken “nil” değil ise çalıştırılacak kod.
}Görüldüğü üzere bir optional’ı, değer alması halinde bir sabite atıyoruz. Sabite atandıktan sonra ise closure açıp yapılacakları yazıyoruz. Örnek ile daha iyi anlatılabilir:
// Optional bir değişken tanımlayalım. Halihazırda nil olmayacak şekilde “İstanbul” değeri atadık.var sonDurak: String? = “İstanbul”
// Şimdi tanımladığımız optional değeri istikamet isimli bir sabite “if let” kullanarak atıyoruz.if let istikamet = sonDurak {
// sonDurak nil olmadığı için bu kod bloğunun içerisindekiler uygulanacak. Yani print alacağız. print(“Varış noktamız: \(istikamet). İyi yolculuklar!”) // Varış noktamız: İstanbul. İyi yolculuklar!
}
