我们已经知道可以在单个if/guard语句中使用逗号分隔多个可选绑定,但不能用&&例如
// Works as expected
if let a = someOpt, b = someOtherOpt {
}
// Crashes
if let a = someOpt && b = someOtherOpt {
}
Run Code Online (Sandbox Code Playgroud)
玩游戏,逗号风格的格式似乎也适用于布尔条件,虽然我无法在任何地方找到这个.例如
if 1 == 1, 2 == 2 {
}
// Seems to be the same as
if 1 == 1 && 2 == 2 {
}
Run Code Online (Sandbox Code Playgroud)
这是一种可接受的方法,用于评估多个布尔条件,并且它们的行为是,相同的&&还是技术上不同?
mrc*_*mrc 24
实际上结果并不相同.假设你在if和&之间有2个语句.如果在第一个中使用可选绑定创建let,则无法在第二个语句中看到它.相反,使用逗号,你会.
逗号示例:
if let cell = tableView.cellForRow(at: IndexPath(row: n, section: 0)), cell.isSelected {
//Everything ok
}
Run Code Online (Sandbox Code Playgroud)
&&示例:
if let cell = tableView.cellForRow(at: IndexPath(row: n, section: 0)) && cell.isSelected {
//ERROR: Use of unresolved identifier 'cell'
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
在Swift 3中,where条件子句中的关键字被替换为逗号.
所以if 1 == 1, 2 == 2 {}一句话就是说"如果1等于1,其中2等于2 ..."
使用a &&而不是a 读取条件语句可能最容易,,但结果是相同的.
您可以在Swift Evolution提案中详细了解Swift 3中的更改细节:https://github.com/apple/swift-evolution/blob/master/proposals/0099-conditionclauses.md
在评估布尔逗号分隔条件时,最容易想到的逗号是一对或括号。所以,如果你有
if true, false || true {}
Run Code Online (Sandbox Code Playgroud)
它变成了
if true && (false || true) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |