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的问题看到的结果。

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...