用法一
??(_:_:)
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大神的英文原创作品 ??(_:_:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。