Swift nil有数值吗?

Swift nil有数值吗?,第1张

概述这是Swift中的有效代码: println(nil < 1) 输出也是如此 println(nil > 1) 将是假的(数字1是任意的,你可以做同样的-1,可能还有别的)。我问的原因是因为我看到一些代码,试图将“some_string”.toInt()与一个数值进行比较,并且它被编译,考虑到Int()返回Int?似乎是错误的。 我的问题是,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 nil有数值吗?全部内容,希望文章能够帮你解决Swift nil有数值吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1054627.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存