"Çifte opsiyoneller" yararlı olabilir ve Swift blog girişi "Optionals Case Study: valuesForKeys" bir uygulamayı tarif etmektedir.
let dict : [String : String?] = ["a" : "foo" , "b" : nil]
değerler olarak isteğe bağlı dizeleri ile bir sözlük geçerli:
İşte basitleştirilmiş bir örnektir. Bu nedenle
let val = dict[key]
tip Optional<Optional<String>>
aka String??
sahiptir. Sözdiziminde anahtar yoksa ve .Some(x)
ise .None
(veya nil
) şeklindedir. İkinci durumda, x
Optional<String>
aka String?
ve s
bir String olduğu .None
(veya nil
) veya .Some(s)
olabilir.
kullanabilirsiniz bağlayıcı isteğe bağlı çeşitli durumlar için kontrol etmek iç içe:
for key in ["a", "b", "c"] {
let val = dict[key]
if let x = val {
if let s = x {
print("\(key): \(s)")
} else {
print("\(key): nil")
}
} else {
print("\(key): not present")
}
}
Çıktı:
a: foo
b: nil
c: not present
Aynı desen içinde eşleşen nasıl gerçekleştirilebileceği görmek öğretici olabilir Bir anahtar deyimi:
veyakullanarak .Some(x)
ile eşanlamlı olarakkalıbı:
let val = dict[key]
switch val {
case let (s??):
print("\(key): \(s)")
case let (s?):
print("\(key): nil")
case nil:
print("\(key): not present")
}
(Ben daha derinden iç içe seçeneklere için mantıklı bir uygulama bilmiyorum.)
Ayrıca, kapsamlı olmak için, bir deneyin? ... gibi? ... bir çift İsteğe bağlı dönecektir. –
@ Cœur: Evet, ancak bu parantez ile çözülebilir: eğer değer = (deneyin? ...) izin verirse? ... {...} ', isteğe bağlı bir isteğe bağlı bağlamanın başka bir isteğe bağlı seviye eklememesi nedeniyle. –
Sonra, başka bir örnek, 'UIApplication.shared.delegate? .window' bir çift isteğe bağlıdır. Pencereyi açmak için '' 'eklemeniz gerekecek. –