默认情况下,与nil / NULL不同的可选值不能与数值进行比较。必须采取哪些步骤,例如nil < 1
和nil < 1.0
评估为真吗?
答案 0 :(得分:1)
nil == 0
将永远不会为true,因为它为false。同样,1 == 0
的评估结果不会为true,也没有采取任何合理的步骤。对于==
,不平等的事物不应返回true。
您想要的语法为(nil ?? 0) == 0
,这是正确的。
但是,如果您发现自己经常尝试将nil视为0(通常足以让您需要一些特殊处理),则表明您的类型不正确。为什么此变量是可选的?听起来这个变量首先应该只是一个Int。如果它以可选(通常是通过JSON)形式进入系统,则应尽早将其转换为非可选类型,并在系统的其余部分中使用该类型。 Swift中的绝大多数变量和属性都不是可选的。如果是这样(很多人会犯这个错误),您会发现自己一直在与系统作斗争。
为了进行编辑,Swift曾经允许您通过这种方式将<
与nil一起使用。它之所以被删除(SE-0121)是因为它会导致许多非常细微的错误(就像隐式将NULL视为零一样,长期以来一直在C和ObjC中引起错误)。您绝对不应该尝试将其放回原处。这确实是一个糟糕的语义。
答案 1 :(得分:1)
我不确定我会建议这样做,但是您可以做类似的事情,例如,整数首先检查它是否为nil,如果是,则与0进行比较。参数,其他类型也一样。
extension Optional where Wrapped == Comparable {
public static func < (lhs: Wrapped?, rhs: Int) -> Bool {
guard let left = lhs as? Int else {
return 0 < rhs
}
return left < rhs
}
}