用法一
??(_:_:)
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大神的英文原創作品 ??(_:_:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。