पहले, मैं एक [String?]
मानचित्रण का प्रयास करें, प्राप्त करने के लिए:स्विफ्ट नील-कोलेसिंग वैकल्पिक विकल्प क्यों लौट रहा है? एक <code>[String]</code>
$ 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] = ""
}
यह मेरे लिए एकदम सही समझ में आता है। मैं nil-coalesce String?
, और मुझे String
मिलता है। लेकिन [AnyObject?]
साथ, कुछ अजीब होता है:
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 @"")
}
मैं शून्य-वालों optionals हूँ, लेकिन इस बार मैं एक वैकल्पिक बाहर निकलना। क्यूं कर?
Swift Programming Language कहते a ?? b
a != nil ? a! : b
के लिए आशुलिपि है, लेकिन जब मैं कि कोशिश, मैं गैर optionals की एक सरणी बाहर निकलना:
6> k.map {$0 != nil ? $0! : ""}
$R2: [AnyObject] = 2 values {
[0] = "a"
[1] = ""
}
मैं गलत समझ रहा हूँ कैसे ??
काम करने के लिए माना जाता है? यहाँ क्या हो रहा है?
दिलचस्प सवाल, इसी कारण से यह काम करने लगता है 'res res: [AnyObject] = k.map {$ 0 ?? ""} ' –
'एनीऑब्जेक्ट' और शाब्दिक के साथ एक अजीब प्रकार अनुमान समस्या जैसा दिखता है - यह भी काम करता है: 'k1 = k.map {$ 0 ?? स्ट्रिंग()} ' – Hamish