我们已经知道multiple optional bindings can be used in a single if/guard statement by separating them with commas,但不知道&&
。
// Works as expected
if let a = someOpt, b = someOtherOpt {
}
// Crashes
if let a = someOpt && b = someOtherOpt {
}
在操场上玩,逗号风格的格式似乎也适用于布尔条件,尽管我在任何地方都找不到这一点。
if 1 == 1, 2 == 2 {
}
// Seems to be the same as
if 1 == 1 && 2 == 2 {
}
这是一种可接受的计算多个布尔条件的方法吗?,
的行为与&&
的行为是相同的,还是在技术上有所不同?
7条答案
按热度按时间omvjsjqw1#
实际上结果是不一样的,假设你有两个语句,在它们之间用if和&&,如果在第一个语句中你用可选绑定创建了一个let,你就不能在第二个语句中看到它,而用逗号,你就能看到它。
逗号示例:
示例(&& E):
希望这个有用。
3zwjbxry2#
在Swift 3中,条件子句中的
where
关键字被替换为逗号。因此,像
if 1 == 1, 2 == 2 {}
这样的语句表示“如果1等于1,其中2等于2...”使用
&&
而不是,
来读取条件语句可能是最容易的,但结果是相同的。您可以在Swift Evolution提案中阅读更多关于Swift 3变化的细节:https://github.com/apple/swift-evolution/blob/master/proposals/0099-conditionclauses.md
wtzytmuj3#
当涉及到计算布尔逗号分隔条件时,认为逗号是一对或括号的最简单方式。
它被转化成
tzdcorbm4#
下面是一种情况,它们相差很大,需要使用
,
。在初始化所有成员之前由闭包捕获的“self”
这是由于definition of && on Bool:
RHS上的
selectedIndex < self.profiles.count
卡在封口中。将
&&
更改为,
将消 debugging 误。不幸的是,我不确定,
是如何定义的,但我认为这很有趣。smtd7mpg5#
https://docs.swift.org/swift-book/ReferenceManual/Statements.html#grammar_condition-list
Swift语法规定
if
语句condition-list
可以由多个condition
组成,这些condition
之间用逗号隔开简单条件可以是布尔值
expression
、optional-binding-condition
或其他值:因此,使用逗号分隔多个表达式是非常好的。
sshcrbum6#
当模式匹配开关中的关联值时,使用
,
或&&
很重要,一个编译,另一个不编译(Swift 5.1)。这不会(
,
):knpiaxh17#
如果你使用逗号,编译器会把整件事当作嵌套的if处理:
被当作
这就是为什么
工作但
不!因为第一个事实上等于
然而在第二种情况下,所有的事情都发生在同一个作用域中,并且在那个作用域中
a
没有被定义,这就是为什么you get