零合并运算符
如果值为非零,则可以使用 nil coalescing 运算符 来解包值,否则提供不同的值:
func fallbackIfNil(str: String?) -> String {
return str ?? "Fallback String"
}
print(fallbackIfNil("Hi")) // Prints "Hi"
print(fallbackIfNil(nil)) // Prints "Fallback String"
此运算符能够短路 ,这意味着如果左操作数是非 nil,则不会评估右操作数:
func someExpensiveComputation() -> String { ... }
var foo : String? = "a string"
let str = foo ?? someExpensiveComputation()
在这个例子中,由于 foo
是非零的,因此不会调用 someExpensiveComputation()
。
你还可以将多个 nil 合并语句链接在一起:
var foo : String?
var bar : String?
let baz = foo ?? bar ?? "fallback string"
在此示例中,如果 baz
为非零,则将为其分配未包装的 foo
值,否则如果它为非零,将为其分配未包装的 bar
值,否则将为其分配回退值。