零合并运算符

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