Swift可选模式

Boo*_*oon 7 swift

Swift可选模式允许你像这样使用case:

var arrayOfOptional: [Int?] = [1, 2, nil, 4]

for case let number? in arrayOfOptional {
  print("\(number)")
}
Run Code Online (Sandbox Code Playgroud)

令我困惑的是让号码?句法.在可选绑定中,展开的版本没有,但是如果让它,它确实.你如何解释这个结构,让你有意义解读这个数字?

从功能上讲,下面两者之间有什么区别:

if let x = someOptional {
  print(x)
}
Run Code Online (Sandbox Code Playgroud)

if case let x? = someOptional {
  print(x)
}
Run Code Online (Sandbox Code Playgroud)

Dev*_*ist 3

我刚刚测试了您的第一个代码,以前从未用于模式匹配,但这是我的假设:

var arrayOfOptional: [Int?] = [1, 2, nil, 4]

for case let number in arrayOfOptional {
    print("\(number)")
}
// will return 3 optional ints and a nil

for case let number? in arrayOfOptional {
    print("\(number)")
}
// will return only any values that could be unwrapped
Run Code Online (Sandbox Code Playgroud)

我认为这是一种模式,它会在引擎盖下解开任何可选值,并且只有在可以解开并且愿意的情况下才继续进行。

if case let x? = someOptional {
    print(x)
}
Run Code Online (Sandbox Code Playgroud)

case let用于模式匹配,例如switch x { case let ... }. 在您的示例中,它还会尝试解开可选值。如果它是零,就会失败