为空的非零字符串合并 Swift 运算符
Posted
技术标签:
【中文标题】为空的非零字符串合并 Swift 运算符【英文标题】:Coalescing Swift operator for an empty non-nil string 【发布时间】:2015-04-04 16:27:30 【问题描述】:我在 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,因为它将位于一个类中。
【问题讨论】:
【参考方案1】:""
和 nil
之间存在差异。照原样,您将 foo 定义为“bar”,因此它是非可选的,因此它永远不会返回 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
【讨论】:
您选择使用 4 个问号而不是return true
的 3 个问号是否有特殊原因(如果您还记得 ?)?【参考方案2】:
或者创建你自己的操作符:
infix operator ???
func ??? (lhs: String, rhs: String) -> String
if lhs.isEmpty
return rhs
return lhs
然后:let bar = foo ??? "default"
【讨论】:
以上是关于为空的非零字符串合并 Swift 运算符的主要内容,如果未能解决你的问题,请参考以下文章
为啥条件运算符不能正确地允许使用“null”来分配给可为空的类型? [复制]