为什么没有 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)"
给定以下代码示例:
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)"