我相信正在发生的事情是,通过与比较,
1隐式地将文字转换为该
Int?类型
nil。对于那些不习惯Swift的人,我将进一步解释。Swift有一个称为“可选”的概念,可以有一个值或为
nil。(对于熟悉Haskell的人来说,这基本上是
Maybemonad。)将
nil变量赋给未明确定义为可选的变量是非法的,因此
leti: Int = nil将被编译器拒绝。这带来了一些超出此答案范围的好处,这是一种相当聪明的方法。
这里发生了什么,不过,是字面
1是几种类型的有效值:
Int,
Int32,
Int64,
UInt32,
UInt64,等,等,等,而且这
也是 这些类型的可选版本的有效值:
Int?,
Int32?,等。
因此,当Swift编译器看到文字值和之间的比较时
nil,它会尝试找到两个值都适用的类型。
1是
Int?类型的有效值,也是类型
nil的有效值
Int?,因此它将比较运算符与类型签名一起应用
(Int?,Int?) ->Bool。(这是比较运算符,它接受两个
Int?值并返回
Bool)。该运算符的规则表明,
nil值的排序比其他任何值都低,即使是
Int.min,因此您可以在OP的问题中看到结果。



