Forced Unwrapping vs Automatic Unwrapping vs Optional Binding
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.
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)