Photo by Tai Bui / Unsplash

Forced Unwrapping vs Automatic Unwrapping vs Optional Binding

Swift May 14, 2022

Forced Unwrapping

Değişkenin sağında (!) kullanılarak yapılmaktadır. Optional değişkeni unwrap yaparak normal değişkene çeviriyoruz. Bu yöntem değişkenin nil olmadığına %100 emin olunduğunda kullanılmalıdır yoksa uygulama crash verecektir. Hatta kaynaklarda bu yöntemin kullanılmasından kaçınılması ifade edilir.

var score: Int? 
score = 20 

print(score) 
// Prints: Optional(20) 
Optional
var score: Int? 
score = 20 

print(score!) 
// Prints: 20, not Optional(20) 
Forced Unwrapping

Kullanılabilecek bir örnek vermek gerekirse,

//Example1
let url = URL(string: "https://www.\(website)")!

//Example2
let randomNumber = (1...10).randomElement()!

Automatic (Implicit) Unwrapping

Bu yöntemde unwap edilmesine gerek yoktur. Çünkü değişkenimizi tanımlarken (!) eklendiğimiz için optional durumundan yolun başında çıkarmış oluyoruz. Ancak bu yöntemde değişkenimizin degerinin hiçbir durumda nil olmamasını kontrol etmemiz gerekecektir. Bunun garantisini vermemiz gerekiyor. Sürekli takip etmek haliyle iyi bir yöntem olmayacaktır.

var score: Int! // ? yerine ! kullanıldı 
score = 20 

print(score) 
// Prints: 20
var name: String! 
name = “San Francisco” 

print(“City is \(name)”) 
// Prints: City is San Francisco

Optional Binding

Bu yöntemde ise Force Unwarping deki gibi optional bir değişkeni normal bir değişkene dönüştürülecektir. Ancak en önemli fark ise uygulamanın crash alması engellencektir. Yani nil bir değer geldiğinde bile uygulamanın işleyişinde bir sorun olmayacaktır. Kaynaklarda da vurgulanan ayrıca en sık kullanmamız gereken yöntemde bu olmalıdır. Çünkü en güvenli yöntem Optional Binding'dir.

var score: Int? 
score = 20 

print(score) 
// Prints: Optional(20) 

// Method 1 -> If-Let
if let score = score {
    print (score)
} else {
	print("score was nil")
}

// Method 2 -> Guard-Let
guard let score = score else {
	print("score was nil")
	return
}
print (score)

The Basics — The Swift Programming Language (Swift 5.6)
When should you force unwrap optionals in Swift? - a free Understanding Swift tutorial
Learn Swift coding for iOS with these free tutorials
Unwrapping with guard - a free Hacking with Swift tutorial
Learn Swift coding for iOS with these free tutorials

Tags

Furkan Ozoglu

iOS Developer & Geomatics Engineer