空非零字符串的合并 Swift 运算符

Cam*_*ini 4 string variable-assignment swift

我在 Swift 中有一个字符串变量:

let foo = "bar"
Run Code Online (Sandbox Code Playgroud)

但它也可以是任何其他任意字符串。现在我想做以下事情:

let bar = ... // either the value of foo, or if foo is "", it will be "default"
Run Code Online (Sandbox Code Playgroud)

我查找了“合并运算符”,这似乎是正确的方向。我用下面的代码试了一下:

let bar = foo ?? "default"
Run Code Online (Sandbox Code Playgroud)

但是好像什么时候foo为空,还是会取这个,不会设置default为值。

我假设合并运算符仅适用于nil值而不适用于空字符串。但是,是否有解决方案可以测试我的值是否为空字符串并分配默认值?我不能使用 if/else,因为它将位于一个类中。

ret*_*rue 6

或者创建你自己的操作符:

infix operator ??? {}
func ??? (lhs: String, rhs: String) -> String {
    if lhs.isEmpty {
        return rhs
    }
    return lhs
}
Run Code Online (Sandbox Code Playgroud)

进而: let bar = foo ??? "default"


Ian*_*Ian 5

""和之间有区别nil。照原样,您将 foo 定义为“bar”,因此它是非可选的,因此它永远不会返回 nil。听起来您需要的是三元运算符:

let bar = foo.isEmpty ? foo : "default"
Run Code Online (Sandbox Code Playgroud)

此外,为了扩展 return true 的答案,您可以创建一个运算符来考虑可选字符串和空字符串,如下所示:

infix operator ???? {}
func ???? (lhs: String?, rhs: String) -> String {
    if let s = lhs {
        if !s.isEmpty {
            return s
        }
    }    
    return rhs
}
Run Code Online (Sandbox Code Playgroud)