gpt4 book ai didi

Swift nil 有数值吗?

转载 作者:IT王子 更新时间:2023-10-29 05:09:27 25 4
gpt4 key购买 nike

这是 Swift 中的有效代码:

println(nil < 1)

同样,输出将为真

println(nil > 1)

将为 false(数字 1 是任意的,您可以对 -1 和可能的其他值执行相同的操作)。我问的原因是因为我看到一些代码试图将 "some_string".toInt() 与数值进行比较并编译,考虑到 toInt() 这似乎是错误的返回 Int?

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


Swift 3.0 更新:

看起来 Swift Evolution 通过 removing the optional comparison operators 解决了这个问题.这不再是 Swift 3.0 中的问题,因为它无法编译。

最佳答案

我相信正在发生的事情是文字 1 通过与 nil 的比较被隐式类型转换为 Int? 类型。对于那些不习惯 Swift 的人,我将进一步解释一下。 Swift 有一个叫做“optionals”的概念,它可以有一个值或者是nil。 (对于任何熟悉 Haskell 的人来说,这基本上就是 Maybe monad。)将 nil 分配给未明确定义为可选的变量是非法的,因此 let i: Int = nil 会被编译器拒绝。这带来了一些超出本答案范围的好处,而且这是一种相当聪明的方法。

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

因此,当 Swift 编译器看到文字值和 nil 之间的比较时,它会尝试找到这两个值都有效的类型。 1Int?类型的有效值,nil也是Int?类型的有效值类型,因此它应用具有类型签名 (Int?, Int?) -> Bool 的比较运算符。 (这是采用两个 Int? 值并返回一个 Bool 的比较运算符)。该运算符的规则规定 nil 值的排序低于其他任何值,甚至低于 Int.min,因此您会在 OP 的问题中看到结果。

关于Swift nil 有数值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26172911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com