可选链让我们决定对象的存在:
var text : String?
let len = text?.lengthOfBytes(using: .utf8) ?? 0
它将始终设置len
为整数。
非可选函数参数是否有类似的可能?考虑下面的例子,三元运算符已经不太优雅了。
func length(text: String) -> Int {
return text.lengthOfBytes(using: .utf8)
}
var text : String?
let len = (text != nil) ? length(text!) : 0
如果我们继续链接,它很容易变得一团糟(这就是我真正看到的):
let y = (arg!= nil) ? (foo?.bar(arg!) ?? 0) : 0 // how to improve on this?
此外,它也开始变得多余,定义了两次默认值。
最后一行还有更简洁的解决方案吗?