當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift ??(_:_:)用法及代碼示例

用法一

操作符

??(_:_:)

執行 nil-coalescing 操作,返回 Optional 實例的包裝值或默認 Optional 值。

聲明

func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?

參數

optional

一個可選值。

defaultValue

用作默認值的值。 defaultValueoptional 具有相同的類型。

詳述

nil-coalescing 操作在有值的情況下解開左側,或者將右側作為默認值返回。此操作的結果將與其參數的類型相同。

此運算符使用短路評估:首先檢查 optional,並且僅當 optionalnil 時才評估 defaultValue。例如:


let goodNumber = Int("100") ?? Int("42")
print(goodNumber)
// Prints "Optional(100)"


let notSoGoodNumber = Int("invalid-input") ?? Int("42")
print(notSoGoodNumber)
// Prints "Optional(42)"

在此示例中,goodNumber 被分配了 100 的值,因為 Int("100") 成功返回了非 nil 結果。當 notSoGoodNumber 初始化時, Int("invalid-input") 失敗並返回 nil ,因此調用 Int("42") 以提供默認值。

由於此nil-coalescing 操作的結果本身是一個可選值,因此您可以通過多次使用?? 來鏈接默認值。第一個不是 nil 的可選值會停止鏈並成為整個表達式的結果。下一個示例嘗試在兩個單獨的字典中為問候語找到正確的文本,然後再返回到靜態默認值。


let greeting = userPrefs[greetingKey] ??
    defaults[greetingKey] ?? "Greetings!"

如果 userPrefs[greetingKey] 有一個值,則將該值分配給 greeting 。如果不是,則 defaults[greetingKey] 中的任何值都會成功,如果不是,則 greeting 將設置為非可選默認值 "Greetings!"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

用法二

操作符

??(_:_:)

執行 nil-coalescing 操作,返回 Optional 實例的包裝值或默認值。

聲明

func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T

參數

optional

一個可選值。

defaultValue

用作默認值的值。 defaultValueoptionalWrapped 類型相同。

詳述

nil-coalescing 操作在左側有值時解包,或者默認返回右側。此操作的結果將具有左側Wrapped 類型的非可選類型。

此運算符使用短路評估:首先檢查 optional,並且僅當 optionalnil 時才評估 defaultValue。例如:


func getDefault() -> Int {
    print("Calculating default...")
    return 42
}


let goodNumber = Int("100") ?? getDefault()
// goodNumber == 100


let notSoGoodNumber = Int("invalid-input") ?? getDefault()
// Prints "Calculating default..."
// notSoGoodNumber == 42

在此示例中,goodNumber 被分配了 100 的值,因為 Int("100") 成功返回了非 nil 結果。當 notSoGoodNumber 初始化時, Int("invalid-input") 失敗並返回 nil ,因此調用 getDefault() 方法來提供默認值。

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 ??(_:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。