Z Swift 3, można użyć opcjonalnego łańcuchowym, switch lub opcjonalnej wzór w celu rozwiązania problemu.
1. Korzystanie if let
(opcjonalnie wiązania/opcjonalnie łańcuchowym)
W Swift Programming Language stany o opcjonalnym łańcuchowych:
Wiele zapytań mogą być połączone w łańcuch, a cały łańcuch nie wdzięcznie jeśli link w łańcuchu jest zerowy.
Dlatego w najprostszym przypadku można użyć następującego wzoru do korzystania z wielu zapytań w opcjonalnej pracy łańcuchowym:
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
if let latitude = latitude as? Double, let longitude = longitude as? Double {
print(latitude, longitude)
}
// prints: 2.0 10.0
2. Korzystanie krotki i wiążące w instrukcji switch wartość
Jako alternatywę dla prostego opcjonalnego łączenia, switch statement może zaoferować drobnoziarniste rozwiązanie, gdy jest używane z krotkami i wiązaniem wartości:
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
switch (latitude, longitude) {
case let (Optional.some(latitude as Double), Optional.some(longitude as Double)):
print(latitude, longitude)
default:
break
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
switch (latitude, longitude) {
case let (latitude as Double, longitude as Double):
print(latitude, longitude)
default:
break
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
switch (latitude as? Double, longitude as? Double) {
case let (.some(latitude), .some(longitude)):
print(latitude, longitude)
default:
break
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
switch (latitude as? Double, longitude as? Double) {
case let (latitude?, longitude?):
print(latitude, longitude)
default:
break
}
// prints: 2.0 10.0
3. Za pomocą krotki z if case
(opcjonalnie wzorzec)
if case
(optional pattern) stanowi Conveni ent sposób, aby odwijać wartości opcjonalnego wyliczenia. Można go używać z krotek, aby wykonać jakiś opcjonalny łańcuchowym z wieloma zapytaniami:
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
if case let (.some(latitude as Double), .some(longitude as Double)) = (latitude, longitude) {
print(latitude, longitude)
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
if case let (latitude as Double, longitude as Double) = (latitude, longitude) {
print(latitude, longitude)
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
if case let (.some(latitude), .some(longitude)) = (latitude as? Double, longitude as? Double) {
print(latitude, longitude)
}
// prints: 2.0 10.0
let dict = ["latitude": 2.0 as AnyObject?, "longitude": 10.0 as AnyObject?]
let latitude = dict["latitude"]
let longitude = dict["longitude"]
if case let (latitude?, longitude?) = (latitude as? Double, longitude as? Double) {
print(latitude, longitude)
}
// prints: 2.0 10.0
możliwe duplikat [rozpakowaniu wielu ewentualne, jeśli instrukcja] (http://stackoverflow.com/questions/24548999/unwrapping-multiple-optionals-in-if-statement) – Jack
Może istnieć sposób użycia instrukcji switch do wzorca mat ch typów. Spójrz na [Dokumenty] (https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-XID_448): – lomokat
możliwy duplikat [Używanie "jeśli pozwól ..." z wieloma wyrażeń] (http://stackoverflow.com/questions/24118900/using-if-let-with-many-expressions) – rickster