Birincisi, almak, bir [String?]
haritalama deneyin bir [String]
:Neden Swift nil-birleştirmeyi isteğe bağlı olarak döndürüyor?
$ xcrun swift
Welcome to Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.30). Type :help for assistance.
1> import Foundation
2> let j: [String?] = ["a", nil]
j: [String?] = 2 values {
[0] = "a"
[1] = nil
}
3> j.map {$0 ?? ""}
$R0: [String] = 2 values {
[0] = "a"
[1] = ""
}
Bu benim için çok mantıklı. Ben String?
nolu birleştirme ve String
aldım. Ama [AnyObject?]
ile, garip bir şey olur:
4> let k: [AnyObject?] = ["a", nil]
k: [AnyObject?] = 2 values {
[0] = "a"
[1] = nil
}
5> k.map {$0 ?? ""}
$R1: [AnyObject?] = 2 values {
[0] = "a"
[1] = (instance_type = 0x00007fff7bc2c140 @"")
}
ben nil-kaynaştırma isteğe bağlı öğeleri değilim, ama bu kez isteğe bağlı çıkmak. Niye ya?
Swift Programming Languagea ?? b
a != nil ? a! : b
için kısaltmadır diyor, ama ben çalıştığınızda, ben olmayan seçeneklere bir dizi çıkmak: İşe gerekiyordu nasıl ??
6> k.map {$0 != nil ? $0! : ""}
$R2: [AnyObject] = 2 values {
[0] = "a"
[1] = ""
}
yanlış anlama ben? Burada neler oluyor?
İlginç bir soru, aynı nedenden dolayı bu işe yaramıyor gibi görünüyor: res: [AnyObject] = k.map {$ 0 ?? ""} " –
" AnyObject "ve literals ile garip bir tür çıkarsama sorunu gibi görünüyor - bu da çalışır:' k1 = k.map {$ 0 ?? String()} ' – Hamish