【发布时间】:2015-07-16 12:12:39
【问题描述】:
Swift 可选模式允许您像这样使用 case let:
var arrayOfOptional: [Int?] = [1, 2, nil, 4]
for case let number? in arrayOfOptional {
print("\(number)")
}
让我感到困惑的是 let number? 语法。在可选绑定中,展开的版本没有 ?,但如果是 let,则有。你如何解释这个结构,以使数字未包装对你有意义?
从功能上来说,下面两者有什么区别:
if let x = someOptional {
print(x)
}
对
if case let x? = someOptional {
print(x)
}
【问题讨论】:
-
x?只是模式中.Some(x)的快捷方式(如Optional Patterns 中所述)。您的问题是为什么 Apple 选择了这种特定的语法吗? (我想苹果开发者论坛上已经讨论过这是否直观。) -
这种语法与可选绑定相反,它在没有你指定 ? 的情况下展开,试图找到一种方法来解释它,以便我可以更容易地记住行为。此外,鉴于这是 .Some(x) 的快捷方式,如果您直接执行 x 而不使用 怎么办? (例如,如果 case let x) - 那映射到什么?
-
if case let x = y { }完全没用。它总是正确的并将y分配给x。但是if case let x as SubClass = y { }在功能上等同于if let x = y as? SubClass { }。 – 可选模式比可选绑定更通用,它们可以用在 switch/if/while/for 语句中,只是语法不同(可能不直观)。
标签: swift