J. *_*coe 7 type-inference swift
首先,我尝试映射a [String?],得到一个[String]:
$ 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] = ""
}
Run Code Online (Sandbox Code Playgroud)
这对我来说非常有意义.我没有合并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 @"")
}
Run Code Online (Sandbox Code Playgroud)
我没有合并选项,但这次我选择了.为什么?
在斯威夫特编程语言说a ?? b是简写a != nil ? a! : b,但是当我尝试,我得到了非自选的数组:
6> k.map {$0 != nil ? $0! : ""}
$R2: [AnyObject] = 2 values {
[0] = "a"
[1] = ""
}
Run Code Online (Sandbox Code Playgroud)
我误解了??应该如何运作?这里发生了什么?
我注意到 Apple 认为这是 Swift 2 中的一个错误。
在 Swift 3 中,上面的第一个示例仍然有效,而第二个和第三个示例是无效语法(有或没有 Foundation 桥接)。
将声明替换AnyObject为AnyWorks: a ?? bthen 的行为与 相同a != nil ? a! : b,如文档所述。
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |