给定follwoing代码示例:
var ResponseCode: Int? = 404
print(ResponseCode) // --> Optional(404)
ResponseCode = nil
print(ResponseCode) // --> nil (why not Optional(nil)?)
问题:为什么当我打印nil值选项时,它只是一个nil
。为什么不显示Optional(nil)
感谢您的时间和帮助。
这很容易解释。Optional
是一个具有两个值的枚举:.Some(T)
和.None
。
如您所见,只有一个具有参数。
.Some(T)
的字符串描述是"Optional(description of T)"
。.None
没有参数,因此描述只是nil
。
注意您有时可以在日志中看到"Optional(nil)"
,但是,在这种情况下,我们正在处理双重选项(例如Int??
)。
print(Optional<Int?>(Optional<Int>.None)) // prints "Optional(nil)"
,因为 nil
是常数字面意思,含义 Option.None
。
允许可选的存储零值是没有意义的,并且会完全违反选项的目的(非删除性)。