İ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 = booleanValuedöndürür falseeğer booleanValueolduğunu nilveif blok çalışmaz. Eğer booleanValuedeğ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: Booldeğişkeni değerlendirir . ifDoğruysa , blok booleanValue: Bool, kapsamda yeni tanımlanan değişkenle yürütülür (seçeneğin ifblok 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 falseo kadar net değil
var booleanValue : Bool? = false
if !(booleanValue ?? false) {
print("optional booleanValue: '\(booleanValue)'")
}
Not: if !booleanValue ?? falsederlemez.
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 ifaçı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.).