零合併運算子
如果值為非零,則可以使用 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
值,否則將為其分配回退值。