微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在swift可选中比较值

var someString: String? = "a"    
someString = "b" 
// or someString = nil

条件:someString不是nil和“a”

例:

if someString != nil && someString != "a" {

}

是否可以调整一个

解决方法

我认为你的意思是你想在单个逻辑表达式中测试someString!= nil和someString!=“a”(而不是两个in和).

不,我不认为使用内置运算符是可能的,但是可以像这样实现String扩展:

extension String {
    func isDifferentThan(value: String?) -> Bool {
        return value != nil && self != value?
    }
}

你可以使用如下:

someString = nil
"a".isDifferentThan(someString) // Return false

someString = "b"
"a".isDifferentThan(someString) // Return true

someString = "a"
"a".isDifferentThan(someString) // Return false

附录:更优雅的解决方案是定义自己的逻辑运算符.我用过了!〜=但随意使用你自己的.

infix operator !~= { associativity left }
func !~= (a: String?,b: String?) -> Bool {
    if a == nil || b == nil {
        return false
    }

    return a != b
}

测试如下:

someString = nil
someString !~= "a" // Returns false

someString = "b"
someString !~= "a" // Returns true

someString = "a"
someString !~= "a" // Returns false

someString = nil
someString !~= nil // Returns false

您可以在处理nil值时对其进行微调(例如,如果您希望条件“双方都为零”以评估为true,则添加对nil和返回true的检查)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐