gpt4 book ai didi

Swift nil 有数值吗?

转载 作者:行者123 更新时间:2023-11-30 13:55:17 24 4
gpt4 key购买 nike

这是 Swift 中的有效代码:

println(nil < 1)

同样,输出将为 true

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 中不再是问题,因为它无法编译。

最佳答案

我相信正在发生的事情是,通过与 nil 进行比较,文字 1 被隐式类型转换为 Int? 类型。对于那些不习惯 Swift 的人,我将进一步解释一下。 Swift 有一个称为“可选值”的概念,它可以有值,也可以为 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/33705338/

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