让Optional.none评估为0

问题描述 投票:1回答:2

不同于零/ NULL可选值不能在默认情况下的数值进行比较。哪些步骤必须采取有例如nil < 1nil < 1.0评价为真?

swift null optional
2个回答
1
投票

nil == 0永远评估为true,因为它是假的。同样1 == 0不会评价为真,并有可以采取让它这样做没有合理的步骤。不平等的事情不应该==返回true。

你想语法(nil ?? 0) == 0,这是真的。

但是,如果你发现自己试图把零为0经常(往往不够,你会想要一些特殊的处理),那么建议你的类型是不正确。这是为什么变量可选?这听起来像这个变量应该只是摆在首位的诠释。如果它进入您的系统为可选(通过JSON最常见的),你应该把它早在你可以转换到非可选类型和使用整个系统的其余部分。绝大多数的斯威夫特变量和属性不宜选用。如果他们(很多人会犯这种错误),你会发现自己不断的战斗系统。


您的编辑,斯威夫特用来让你与使用<零这样。这是故意的(SE-0121)移除,因为它会导致很多真正微妙的错误(就像处理NULL隐含0早已引起了C和ObjC错误)。你绝对不应该试图把该回来了。这是一个非常糟糕的语义。


1
投票

我不知道我会建议这样做,但你可以做这样的事情,作为整数首先检查一个例子,如果它是零,如果是的话只是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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.