空非零字符串的合并 Swift 运算符
Coalescing Swift operator for an empty non-nil string
我在 Swift 中有一个字符串变量:
let foo = "bar"
但它也可以是任何其他任意字符串。现在我想做以下事情:
let bar = ... // either the value of foo, or if foo is "", it will be "default"
我查了一下"coalescing operator",看来方向是对的。我用下面的代码试了一下:
let bar = foo ?? "default"
但是好像foo
为空的时候,还是会取这个,不会把default
设为值。
我假设合并运算符仅适用于 nil
值而不适用于空字符串。但是,是否有一种解决方案可以测试我的值是否为空字符串并分配默认值?我不能使用 if/else,因为它将位于 class.
""
和 nil
有区别。实际上,您将 foo 定义为 "bar",因此它是非可选的,因此它永远不会 return nil。听起来你需要的是三元运算符:
let bar = foo.isEmpty ? foo : "default"
此外,为了扩展 return true 的答案,您可以创建一个运算符来考虑可选字符串和空字符串,如下所示:
infix operator ???? {}
func ???? (lhs: String?, rhs: String) -> String {
if let s = lhs {
if !s.isEmpty {
return s
}
}
return rhs
}
或创建您自己的运算符:
infix operator ??? {}
func ??? (lhs: String, rhs: String) -> String {
if lhs.isEmpty {
return rhs
}
return lhs
}
然后:let bar = foo ??? "default"
我在 Swift 中有一个字符串变量:
let foo = "bar"
但它也可以是任何其他任意字符串。现在我想做以下事情:
let bar = ... // either the value of foo, or if foo is "", it will be "default"
我查了一下"coalescing operator",看来方向是对的。我用下面的代码试了一下:
let bar = foo ?? "default"
但是好像foo
为空的时候,还是会取这个,不会把default
设为值。
我假设合并运算符仅适用于 nil
值而不适用于空字符串。但是,是否有一种解决方案可以测试我的值是否为空字符串并分配默认值?我不能使用 if/else,因为它将位于 class.
""
和 nil
有区别。实际上,您将 foo 定义为 "bar",因此它是非可选的,因此它永远不会 return nil。听起来你需要的是三元运算符:
let bar = foo.isEmpty ? foo : "default"
此外,为了扩展 return true 的答案,您可以创建一个运算符来考虑可选字符串和空字符串,如下所示:
infix operator ???? {}
func ???? (lhs: String?, rhs: String) -> String {
if let s = lhs {
if !s.isEmpty {
return s
}
}
return rhs
}
或创建您自己的运算符:
infix operator ??? {}
func ??? (lhs: String, rhs: String) -> String {
if lhs.isEmpty {
return rhs
}
return lhs
}
然后:let bar = foo ??? "default"