Swift nil有数值吗?

前端之家收集整理的这篇文章主要介绍了Swift nil有数值吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是Swift中的有效代码
println(nil < 1)

输出也是如此

println(nil > 1)

将是假的(数字1是任意的,你可以做同样的-1,可能还有别的)。我问的原因是因为我看到一些代码,试图将“some_string”.toInt()与一个数值进行比较,并且它被编译,考虑到Int()返回Int?似乎是错误的。

我的问题是,Swift应该是有效的语法吗?如果是这样,nil的数值是多少?

Swift 3.0更新:

看起来像Swift Evolution在removing the optional comparison operators处理这个问题。这不再是Swift 3.0的问题,因为它不编译。

我相信发生了什么是文字1是Int的隐含的类型?类型比较为零。对于那些不习惯Swift的人,我会进一步解释一下。 Swift有一个名为“可选”的概念,它可以是一个值,也可以是零。 (对于熟悉Haskell的人来说,这基本上是Maybe monad。)将nil分配给一个没有被明确定义为可选的变量是非法的,所以让我:Int = nil将被编译器拒绝。这允许在这个答案的范围之外的几个好处,这是一个相当聪明的方式来做到这一点。

这里发生的是,文字1是几种类型的有效值:Int,Int32,Int64,UInt32,UInt64等等。它也是这些类型的可选版本的有效值:Int?,Int32?等

所以当Swift编译器看到一个文字值和零之间的比较时,它会尝试找到一个这两个值对它有效的类型。 1是Int的有效值? type,而nil也是Int的有效值?类型,因此它将比较运算符与类型签名(Int?Int?)→>布尔。 (这是比较运算符,它需要两个Int?值并返回一个Bool)。该运算符的规则表明,零价值比其他任何数值都低,即使是Int.min,所以你得到OP的问题看到的结果。

猜你在找的Swift相关文章