零合併運算子

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