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