Swift Notları — 1 Unwrapping Mantığı

Çağatay Yıldız
BilgeAdam Teknoloji
3 min readDec 1, 2021

Unwrapping ve optinal konusu Swift dilinin en can sıkıcı konularından biri olsa gerek. Dilin birçok dil gibi “type safe” olması nedeniyle kullandığınız bir çok tipin null ( veya swiftteki adıyla nil) kontrollerinin development sırasında yapılması, buna göre senaryolarının belirlenmesi gerekir. Swift tip güvenli bir yaklaşım seçmesinin nedeni olarak yazılım geliştirme esnasında hataları minimuma indirmek ve kolayca yakalamak olduğunu söylüyor.

Swift is a type-safe language, which means the language helps you to be clear about the types of values your code can work with. If part of your code requires a String, type safety prevents you from passing it an Int by mistake. Likewise, type safety prevents you from accidentally passing an optional String to a piece of code that requires a non-optional String. Type safety helps you catch and fix errors as early as possible in the development process.

Nil ve Kontrolleri

Bir değişkeni tanımladığımızda bu değişkenin nil olabilme ihtimaline karşın “?” anahtarını kullanıyoruz. Bu şekilde tanımladığımız bir değişken herhangi bir operatörle çalışmak istediğinde ise swift dilinin optional maceraları karşımıza çıkıyor :)

Örneğin name ve surname adında iki değişken tanımlayalım ve bunları toplayıp fullname adında bir değere atayalım. Fakat name değişkenine şimdilik bir şey atamıyoruz. Bu durumda karşımıza şöyle bir hata gelmekte:

Buradaki name değişkenimiz optional bir değer. Dolayısıyla string işlemindeki “+” operatörü optional değerle string bir değişkenini toplayamıyor ve bize çeşitli önerilerde bulunuyor. “name alanına bir değer atamadık. Elbette toplamaz” diyebiliriz. Fakat değer atadığımızda da aynı hatayı alacağız.

Gördüğünüz üzere name değişkenine bir değer atamama rağmen toplama işlemini gerçekleştiremiyor. Swift dili tip güvenliğini bu konuda sonuna kadar zorlamakta.

Name değerini ekrana yazdırdığımızda da bu değerin Optional bir tipte olduğunu görüyoruz.

Çözüm Yolları

Burada bize playground ortamının önerdiği iki adet çözüm mevcut. Birincisi optional değerinin nil gelme durumunda alternatif bir değer atamak ( aşağıda boş bir string atıyoruz) diğeri ise “!” anahtarıyla zor kullanmak. “! “ anahtarıyla yaptığımız işleme “force unwrapping” diyoruz.

Diğer Yollar

Değerimizin sadece dolu olması durumunda çalışması için bir if bloğu ile de kontrol de edebiliriz. Swift bu duruma “Optional Binding” ismini vermekte. Aşağıdaki kod bloğunda name değişkeni myName isimli bir değere atanabildiği takdirde kod bloğu çalışacak. Diğer türlü if bloğuna girmeyecek.

Guard Let Kullanımı

Swift dili fonksiyon içerisinde bu değerlerin kontrolleri için guard adında bir anahtar kelime kullanıyor. Bu kelime sayesinde optional değere işlem yapamadığı bir durumda fonksiyon imzasına göre return anahtar kelimesiyle fonksiyonu bitirmekte. Böylelikle kodun ilerlemesini istemediğimiz alanlarda böyle bir kontrol koyabiliriz.

Yukarıdaki örnekte getFullName fonksiyonu geriye değer döndürmemekte. Bu yüzden return anahtar kelimesini yalnız kullanıyoruz. Guard yani bizim bekçimiz değerin optional olup olmadığına bakıyor. Eğer değer uygunsa nöbetçiden geçip hayatına devam ediyor :)

Bir sonraki Swift notumuzda görüşmek dileğiyle.

--

--