İsteğe bağlı ciltleme
Hızlı 3 ve 4
var booleanValue : Bool? = false
if let booleanValue = booleanValue, booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
Swift 2.2
var booleanValue : Bool? = false
if let booleanValue = booleanValue where booleanValue {
print("bound booleanValue: '\(booleanValue)'")
}
Kod let booleanValue = booleanValue
döndürür false
eğer booleanValue
olduğunu nil
veif
blok çalışmaz. Eğer booleanValue
değil nil
, bu kod adlı yeni bir değişken tanımlar booleanValue
Çeşidi Bool
(yerine, isteğe bağlı bir ait Bool?
).
Swift 3 ve 4 kodu booleanValue
(ve Swift 2.2 kodu where booleanValue
) yeni booleanValue: Bool
değişkeni değerlendirir . if
Doğruysa , blok booleanValue: Bool
, kapsamda yeni tanımlanan değişkenle yürütülür (seçeneğin if
blok içinde yeniden sınır değerine başvurmasına izin verir ).
Not: Bağlı sabiti / değişkeni isteğe bağlı sabit / değişkenle aynı şekilde adlandırmak bir Swift kuralıdır. let booleanValue = booleanValue
,. Bu tekniğe değişken gölgeleme denir . Gelenekselden kopabilir ve benzeri bir şey kullanabilirsiniz let unwrappedBooleanValue = booleanValue, unwrappedBooleanValue
. Neler olduğunu anlamaya yardımcı olmak için bunu işaret ediyorum. Değişken gölgeleme kullanmanızı öneririm.
Diğer Yaklaşımlar
Nil birleşmesi
Nil birleştirme bu özel durum için açıktır
var booleanValue : Bool? = false
if booleanValue ?? false {
print("optional booleanValue: '\(booleanValue)'")
}
Kontrol etmek false
o kadar net değil
var booleanValue : Bool? = false
if !(booleanValue ?? false) {
print("optional booleanValue: '\(booleanValue)'")
}
Not: if !booleanValue ?? false
derlemez.
Açmayı isteğe bağlı olarak zorla (kaçının)
Zorla sarmalama, birisinin gelecekte derleyen ancak çalışma zamanında çöken bir değişiklik yapma olasılığını artırır. Bu nedenle, böyle bir şeyden kaçınırım:
var booleanValue : Bool? = false
if booleanValue != nil && booleanValue! {
print("optional booleanValue: '\(booleanValue)'")
}
Genel Bir Yaklaşım
Bu yığın taşma sorusu, özellikle a'nın olup olmadığını nasıl kontrol edeceğinizi sorsa Bool?
datrue
bir dahilinde if
açıklamada, bu doğru, yanlış veya diğer ifadelerle Çizelgesi değerini birleştirerek kontrol edip genel bir yaklaşım belirlemek yararlı olur.
İfade karmaşıklaştıkça, isteğe bağlı bağlama yaklaşımını diğer yaklaşımlardan daha esnek ve anlaşılması daha kolay buluyorum. İsteğe bağlı herhangi tip (ki isteğe bağlı bağlayıcı işleri Not Int?
, String?
vs.).