之间是否有任何功能差异:
和
guard let foo = bar, let qux = taco else {
...
}
在我看来,它们是相同的,并且不需要额外的guard let foo = bar, qux = taco else {
...
}
?
答案 0 :(得分:12)
这些在Swift 3中有所不同。在这种情况下:
guard let foo = bar, let qux = taco else {
你说“可选 - 展开成foo。如果成功,可选择将taco打包成qux。如果成功继续。其他......”
另一方面,这个:
guard let foo = bar, qux = taco else {
说“可选 - 解包进入foo。作为布尔值,评估分配语句qux = taco
”由于赋值语句不会在Swift中返回布尔值,这是语法错误。
此更改允许更灵活的guard
语句,因为您可以在整个链中混合可选的展开和布尔值。在Swift 2.2中,您必须解开所有内容,然后在where
子句的末尾执行所有布尔检查(这有时使得无法表达条件)。
答案 1 :(得分:7)