为什么没有 optional(nil) 而只有 nil?

Why there is no optional(nil) but only nil?

给定以下代码示例:

var ResponseCode: Int? = 404
print(ResponseCode) // --> Optional(404)
ResponseCode = nil
print(ResponseCode) // --> nil (why not Optional(nil)?)

问题:为什么当我打印一个空值选项时它只是一个nil。为什么不同时显示 Optional(nil)

感谢您的宝贵时间和帮助。

因为nil是常量字面意思Option.None.

允许 Optional 存储 nil 值是没有意义的,并且会完全违背 Optional 的目的(强制执行不可空性)。

这个解释起来很简单。 Optional 是一个有两个值的枚举:.Some(T).None

如你所见,其中只有一个有参数。

.Some(T)的字符串描述为"Optional(description of T)".None 没有参数,所以描述只是 nil.

请注意,您有时会在日志中看到 "Optional(nil)",但是,在这种情况下,我们正在处理双重可选(例如 Int??)。

print(Optional<Int?>(Optional<Int>.None)) // prints "Optional(nil)"