我知道什么?当用作运算符时,它是什么意思,当它在Type?
时我的项目中有一个名为MyStruct
的结构,并且特定var的自动完成告诉我它的类型为MyStruct??
不确定这意味着什么或如何安全地打开它。
答案 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(/*...*/))
,表示有效的缓存值有效平均值。