Swift 3 ile sorununuzu çözmek için isteğe bağlı zincirleme, anahtarlama deyimi veya isteğe bağlı desen kullanabilirsiniz.
1. kullanma if let
(isteğe bağlı bağlama / isteğe bağlı zincirleme)
Swift Programlama Dili opsiyonel zincirleme hakkında devletler:
Birden çok sorgu birlikte zincirlenebilir ve zincirdeki herhangi bir bağlantı boşsa tüm zincir zarif bir şekilde başarısız olur.
Bu nedenle, en basit durumda, isteğe bağlı zincirleme işleminizde birden çok sorgu kullanmak için aşağıdaki kalıbı kullanabilirsiniz:
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. Anahtar deyiminde tuples ve değer bağlama kullanma
Basit bir isteğe bağlı zincirlemeye alternatif olarak, switch deyimi , tuples ve değer bağlama ile kullanıldığında ince taneli bir çözüm sunabilir:
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. ile tuples kullanma if case
(isteğe bağlı desen)
if case
( isteğe bağlı desen ) isteğe bağlı numaralandırma değerlerinin paketinden çıkarılması için uygun bir yol sağlar. Birden fazla sorgu ile isteğe bağlı bazı zincirleme yapmak için bunu tuples ile kullanabilirsiniz:
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