Swift Optional’lar

Mehmet Anıl Kul
Sep 2, 2018 · 2 min read

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!
}
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade