Swift中的条件if语句
我在Objective-C中遇到了一个条件if语句:Swift中的条件if语句,swift,conditional,Swift,Conditional,我在Objective-C中遇到了一个条件if语句: self.frontCardView = self.backCardView; if ((self.backCardView = [self popPersonViewWithFrame:[self backCardViewFrame]])) { // Fade the back card into view. ... } 基本上: if((self.backcardwiew=self.popPersonViewWithFr
self.frontCardView = self.backCardView;
if ((self.backCardView = [self popPersonViewWithFrame:[self backCardViewFrame]])) {
// Fade the back card into view.
...
}
基本上:
if((self.backcardwiew=self.popPersonViewWithFrame(self.backcardwiewframe())){…}
这将“self.backCardView
”设置为的返回值
“-popPersonViewWithFrame:
”。在C(和Objective-C)中,一个
赋值是指赋值
在本例中,表达式“(self.backcardwiew=[self]的结果
popPersonViewWithFrame:self.backCardViewFrame])
“的返回值
“-popPersonViewWithFrame:
”
如果返回值为“nil
”,则不执行条件(因为“nil
”是一个false
值)
如果我尝试用Swift做同样的事情:
self.frontCardView = self.backCardView
if ((self.backCardView = self.popPersonViewWithFrame(self.backCardViewFrame()))) {
// Fade the back card into view.
...
}
我在编译时遇到一个错误:
类型“()”不符合协议“LogicValue”
出于安全原因,Swift专门设计为不允许在条件中测试分配(人们意外地使用了一个而不是两个)。赋值运算符的结果总是无效的,就像错误所说的那样。出于安全原因,Swift专门设计为不允许在条件中测试赋值(人们意外地使用了一个而不是两个)。赋值运算符的结果总是void
()
,就像错误所说的那样。()
只是void
的类型别名,这是赋值在Swift中返回的结果。正如Bryan所建议的,只需将作业置于条件之外。()
只是void
的类型别名,这是作业在Swift中返回的结果。正如Bryan所建议的,将赋值置于条件之外。条件不是条件,因此正如Bryan Chen所说,在条件之外进行赋值,但将其赋值给另一个变量。然后,在该条件下,检查该变量是否等于backCardView
,如下所示:
frontCardView = backCardView
let poppedView = self.popPersonViewWithFrame(self.backCardViewFrame())
if backCardView == poppedView {
// Fade the back card into view.
...
这个条件不是一个条件,所以就像Bryan Chen说的,在条件之外做赋值,但是把它赋值给另一个变量。然后,在该条件下,检查该变量是否等于
backCardView
,如下所示:
frontCardView = backCardView
let poppedView = self.popPersonViewWithFrame(self.backCardViewFrame())
if backCardView == poppedView {
// Fade the back card into view.
...
分配,然后分别检查零
self.frontCardView = self.backCardView
self.backCardView = self.popPersonViewWithFrame(self.backCardViewFrame())
if self.backCardView != nil {
// Fade the back card into view.
// ...
}
分配,然后分别检查零
self.frontCardView = self.backCardView
self.backCardView = self.popPersonViewWithFrame(self.backCardViewFrame())
if self.backCardView != nil {
// Fade the back card into view.
// ...
}
只是把赋值放在条件之外为什么在条件周围使用双参数?@NRitH:因为它们完全不相关。我对Swift一无所知,但如果这是类似C#-的(你需要一个
bool
而不是整数或整数值),你就会尝试做类似if((a=b)!=nil的事情{…
最好不要让你的语句有副作用。(self.backcardwiew=self.popPersonViewWithFrame(self.backcardwiewframe())
这不是逻辑值,你需要在这里使用一些比较运算符,比如(self.backcardwiew=self.popPersonViewWithFrame(self.backcardwiewframe())==nil
或其他什么。这将符合逻辑值
协议。只需将赋值置于条件之外。为什么在条件周围使用双参数?@NRitH:因为它们绝对不相关。我对Swift一无所知,但如果这是C#-like(因为你需要有一个bool
而不是一个整数值)你可以尝试做一些类似if((a=b)!=nil){…
的事情,但是不要让你的if
语句有副作用。(self.backCardView=self.popPersonViewWithFrame(self.backCardViewFrame())
这不是逻辑值,您需要在此处使用一些比较运算符,例如(self.backCardView=self.popPersonViewWithFrame(self.backCardViewFrame()))==nil
或其他什么。这将符合逻辑值
协议。看,这是我之前尝试过的,它实际上不符合Objective-C中的相同条件。看,这是我之前尝试过的,它实际上不符合Objective-C中的相同条件。