类型末尾的双问号是什么意思?

emr*_*tci 4 arrays swift

Show Quick Help在 Playground 的部分遇到了未知类型。

我已经打开Show Quick Help部分来查看类型firstArray.

问题是,类型末尾的双标记是什么?


这很熟悉

Double?
Run Code Online (Sandbox Code Playgroud)

苹果 - 可选


未知类型

Double??
Run Code Online (Sandbox Code Playgroud)

截屏

Dáv*_*tor 9

Double??是 的简写符号Optional<Optional<Double>>,它只是一个嵌套的Optional. Optional是一个泛型enum,其Wrapped值实际上可以是另一个Optional,因此您可以创建嵌套的Optionals。

let optional = Optional.some(2)
let nestedOptional = Optional.some(optional)
Run Code Online (Sandbox Code Playgroud)

nestedOptional这里的类型是Int??

对于您的具体示例,item.firstis Double??,因为item它本身是类型[Double?]并且Array.first还返回 an Optional,因此您会得到一个嵌套的Optional.

您的compactMap调用data没有任何效果,因为您在外部数组上调用它,其元素本身是非可选数组。过滤掉nil从嵌套数组中的元素,你需要mapdata,然后调用compactMap里面map

let nonNilData = data.map { $0.compactMap { $0 } } // [[100, 35.6], [110, 42.56], [120, 48.4], [200]]
Run Code Online (Sandbox Code Playgroud)

  • 我没有足够的内容添加到这个答案中来保证做出我自己的单独答案,但我建议提到“嵌套可选”意味着“Optional&lt;Optional&lt;Double&gt;&gt;”,并讨论为什么“first”添加了一个选择性层 (2认同)