Swift代码疑问:为何执行结果返回2而非预期的1?
Swift代码执行结果解析
我们一步步拆解代码的执行逻辑:
- 传入的
nums是[Int?]?类型,值为[nil, nil],所以integersArr不为空,integersArr?.randomElement()会正常执行。 randomElement()从数组中随机取出一个元素,数组内的元素都是Int?类型的nil,因此这个表达式的结果是双重可选类型Int??,具体值为.some(nil)——也就是外层可选容器里包裹着一个nil。- 第一个空合运算符
?? 1:空合运算符的触发条件是左侧表达式为完全的nil(即外层可选为.none)。当前左侧是.some(nil),并非完全的nil,所以这个运算的结果是Int?类型的nil。 - 第二个空合运算符
?? 2:此时左侧是Int?类型的nil,满足空合运算符的触发条件,因此最终返回2。
如果想让第一个?? 1生效,需要让integersArr?.randomElement()返回完全的nil,比如将nums设为nil,或者赋值为空数组[](此时randomElement()会返回nil),这时第一个??会返回1,最终结果就是1。
内容的提问来源于stack exchange,提问作者Rajbeer Singh
相关产品推荐
相关产品推荐

