当前位置: 首页 > 面试题库 >

Swift nil是否有数值?

白修谨
2023-03-14
问题内容

这是Swift中的有效代码:

println(nil < 1)

同样,输出将为真

println(nil > 1)

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

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

Swift 3.0更新:

看起来Swift Evolution通过删除可选的比较运算符解决了这个问题。在Swift 3.0中,由于它无法编译,因此不再是一个问题。


问题答案:

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

这里发生了什么,不过,是字面1是几种类型的有效值:IntInt32Int64UInt32UInt64,等,等,等,而且这
也是 这些类型的可选版本的有效值:Int?Int32?,等。

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



 类似资料:
  • 假设有一个切片中有整数。我们声明了一个包含整数值的变量,然后我必须在不使用for循环的情况下从该切片中找到值。 使用for循环时,我会这样做:- 我们如何在不使用for循环的情况下做同样的事情

  • 问题内容: Java是否有析构函数?我似乎找不到关于此的任何文档。如果没有,我怎么能达到同样的效果? 为了使我的问题更具体,我正在编写一个处理数据的应用程序,规范中说应该有一个“重置”按钮,以将应用程序恢复为最初的启动状态。但是,除非关闭应用程序或按下重置按钮,否则所有数据都必须是“实时”的。 作为通常的C / C ++程序员,我认为这将是微不足道的。(因此,我计划最后实现它。)我对程序进行了结构

  • 问题内容: 是否有一个库函数可以枚举Python中的质数(按顺序)? 我发现了这个问题,是列出N以下所有素数的最快方法,但是我宁愿使用别人可靠的库也不愿自己动手。我很乐意做 问题答案: 自问了这个问题之后,我围绕C ++库primesieve编写了Python包装器。https://github.com/hickford/primesieve- python

  • 问题内容: 我今天遇到了与此类似的代码。 似乎暗示数据类型信息可以与NULL值关联。这是否将元数据附加到将其标识为指定数据类型的NULL值? 这篇文章详细介绍了一种在SqlServer中查找数据类型的方法,但是当我尝试以下行时,它以NULL的形式返回: 问题答案: 在SQL Server中,是在默认情况下所有我能想到的场景。您可以使用以下代码确定这一点: 结果: 在将其放入表中或将其与某些上下文元

  • 问题内容: 我正在使用该方法从服务器检索内容。最近,我遇到了一个问题,其中HTTP响应代码指示错误,但是仍然抛出了流,而不是抛出异常。这导致该错误在执行中出现得更晚,并被证明是红色鲱鱼。据我所知,当您使用此方法打开流时,无法检查HTTP响应代码。 我能找到正确处理此问题的唯一方法是 在 打开流 之前 获取连接: 那你同意吗?是否有任何安全使用openStream的良好条件,或者不建议使用openS

  • 问题内容: 我正在使用Selenium的WebDriver为我正在进行自我教育的ASP.NET MVC应用程序运行一些SpecFlow测试。 使用,等都需要很长时间才能运行,所以使用它们实际上非常令人沮丧(我认为)。 我已经读过一个据说比基于浏览器的驱动程序快得多的文件。但我似乎在.NET客户端库(仅Java)中找不到版本。是否有.NET版本? 问题答案: 要使用HtmlUnit,您需要使用Rem