斯威夫特?在一个类型

时间:2016-07-25 12:15:36

标签: swift

我知道什么?当用作运算符时,它是什么意思,当它在Type?

我的项目中有一个名为MyStruct的结构,并且特定var的自动完成告诉我它的类型为MyStruct??

不确定这意味着什么或如何安全地打开它。

1 个答案:

答案 0 :(得分:4)

正如其他人所说,它是一个双重可选,与零合并运算符(??)完全无关。

要解开它,您只需打开常规可选项,两次:

let doubleOptional: MyStruct?? = MyStruct()

guard let singleOptional = doubleOptional else {
    //first unwrapping failed
}

guard let wrappedValue = singleOptional else {
    //second unwrapping failed
}

//use wrappedValue

这些非常罕见,但有时它们很有用。

例如,假设您有一个存储数组平均值的数据结构。该数组可能为空,因此应允许平均值为nil,以表示没有平均值。假设计算此平均值非常昂贵,我们希望将其存储在缓存层中。此缓存层可以具有表示该平均值的双重可选项。如果值为Optional.None(即nil),我们知道缓存还没有值,因此需要计算它。如果值为Optional.Some(Optional.None),我们知道缓存有一个值,但没有有效的平均值(即数组为空。最后,值可以是Optional.Some(Optional.Some(/*...*/)),表示有效的缓存值有效平均值。