我在Swift中有一个字符串变量:
let foo = "bar"
但它也可以是任何其他任意字符串。现在我想做以下事情:
let bar = ... // either the value of foo, or if foo is "", it will be "default"
我抬起头来"合并运营商"而且它似乎是正确的方向。我用以下代码尝试了它:
let bar = foo ?? "default"
但似乎当foo
为空时,它仍会采用此功能,并且不会将default
设置为值。
我假设合并运算符只能使用nil
值,而不能使用空字符串。但是,有没有一个解决方案,我可以测试我的值为空字符串,并指定一个默认值?我不能使用if / else,因为它将位于一个类中。
答案 0 :(得分:4)
""
和nil
之间存在差异。因此,您将foo定义为“bar”,因此它是非可选的,因此它永远不会返回nil。听起来你需要的是三元运算符:
let bar = foo.isEmpty ? foo : "default"
另外,要扩展返回true的答案,你可以创建一个运算符来同时考虑可选字符串和空字符串:
infix operator ???? {}
func ???? (lhs: String?, rhs: String) -> String {
if let s = lhs {
if !s.isEmpty {
return s
}
}
return rhs
}
答案 1 :(得分:3)
或创建自己的运营商:
infix operator ??? {}
func ??? (lhs: String, rhs: String) -> String {
if lhs.isEmpty {
return rhs
}
return lhs
}
然后:let bar = foo ??? "default"