用法一
??(_:_:)
Optional 實例的包裝值或默認 Optional 值。聲明
func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?
參數
optional一個可選值。
defaultValue用作默認值的值。
defaultValue和optional具有相同的類型。
詳述
nil-coalescing 操作在有值的情況下解開左側,或者將右側作為默認值返回。此操作的結果將與其參數的類型相同。
此運算符使用短路評估:首先檢查 optional,並且僅當 optional 為 nil 時才評估 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!" 。
可用版本
用法二
??(_:_:)
Optional 實例的包裝值或默認值。聲明
func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T
參數
optional一個可選值。
defaultValue用作默認值的值。
defaultValue與optional的Wrapped類型相同。
詳述
nil-coalescing 操作在左側有值時解包,或者默認返回右側。此操作的結果將具有左側Wrapped 類型的非可選類型。
此運算符使用短路評估:首先檢查 optional,並且僅當 optional 為 nil 時才評估 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() 方法來提供默認值。
可用版本
相關用法
- Swift KeyValuePairs flatMap(_:)用法及代碼示例
- Swift String.UTF8View first用法及代碼示例
- Swift Result.Publisher zip(_:_:_:)用法及代碼示例
- Swift Optional.Publisher reduce(_:_:)用法及代碼示例
- Swift Int8 ~(_:)用法及代碼示例
- Swift SetAlgebra isStrictSubset(of:)用法及代碼示例
- Swift UInt +(_:)用法及代碼示例
- Swift Array enumerated()用法及代碼示例
- Swift FlattenSequence prefix(_:)用法及代碼示例
- Swift Slice endIndex用法及代碼示例
- Swift LazySequence split(maxSplits:omittingEmptySubsequences:whereSeparator:)用法及代碼示例
- Swift MutableCollection partition(by:)用法及代碼示例
- Swift ReversedCollection min(by:)用法及代碼示例
- Swift RandomNumberGenerator用法及代碼示例
- Swift Dictionary.Keys shuffled()用法及代碼示例
- Swift AnySequence elementsEqual(_:)用法及代碼示例
- Swift UInt &<<(_:_:)用法及代碼示例
- Swift Optional.Publisher tryDrop(while:)用法及代碼示例
- Swift DefaultIndices endIndex用法及代碼示例
- Swift Substring.UnicodeScalarView insert(contentsOf:at:)用法及代碼示例
- Swift LazyFilterSequence dropFirst(_:)用法及代碼示例
- Swift LazySequence suffix(from:)用法及代碼示例
- Swift ArraySlice starts(with:)用法及代碼示例
- Swift Int16.Words max()用法及代碼示例
- Swift ArraySlice reduce(_:_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 ??(_:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
