【发布时间】:2015-03-03 20:34:34
【问题描述】:
我在下一个 Swift 代码中遇到编译错误
var x:Array<Int?> = [1,2]
var y:Array<Int?> = [1,2]
if x == y { // Error
}
如果两个数组都是Array<Int>,它可以正常工作,但如果其中至少一个是可选的,则会引发如下错误:
二元运算符“==”不能应用于两个
Array<Int?>操作数
我几个月前提交了一份错误报告,但没有得到答复。它仍然出现在 Swift 1.2 中。
为什么会这样?
【问题讨论】:
-
整数?不是可以是
nil的Int,它是一个可选的,当不是nil时可以是Int。那么,Int 和 Int 呢?是无法比较的不同类型。 -
几个月前我也向 Swift 提交了几个错误,但也没有反馈。我计算了一下,Apple 每天在雷达上收到大约 9500 个错误报告。所以他们可能按(高)数字工作......
-
@sasquatch 你说的是真的,但不是真正的根本原因。这里没有非可选项,问题在于可选项缺少
Equatable一致性。 -
@sasquatch 你基本上是对的,但你实际上可以比较
Int和Int?(我刚试过)。这就是让我困惑的地方。 -
@sangonz 严格来说,当您将
Int与Int?进行比较时,发生的事情是 Swift 隐式地将非可选内容包装在可选内容中,然后比较两个Int?s ...... this article 了解更多信息。
标签: swift