我在Objective-C中遇到了条件if语句:
self.frontCardView = self.backCardView;
if ((self.backCardView = [self popPersonViewWithFrame:[self backCardViewFrame]])) {
// Fade the back card into view.
...
}
基本上:
if ((self.backCardView = self.popPersonViewWithFrame(self.backCardViewFrame()))) {...}
这设置" self.backCardView
"到的返回值
" -popPersonViewWithFrame:
&#34 ;.在C(和Objective-C)中,结果为
赋值是指定的值。
在这种情况下,表达式的结果" (self.backCardView = [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'
答案 0 :(得分:2)
Swift专门设计为不允许出于安全原因在条件中测试作业(人们不小心使用一个=
而不是两个)。赋值运算符的结果始终为void ()
,如错误所示。
答案 1 :(得分:1)
()
只是void
的一个类型,这是在Swift中返回的作业。正如布莱恩所建议的那样,只是将作业置于条件之外。
答案 2 :(得分:1)
条件不是条件,所以像Bryan Chen说的那样,在条件之外进行赋值,但是将它赋给另一个变量。然后,在条件中,检查该变量是否等于backCardView
,如下所示:
frontCardView = backCardView
let poppedView = self.popPersonViewWithFrame(self.backCardViewFrame())
if backCardView == poppedView {
// Fade the back card into view.
...
答案 3 :(得分:1)
分配,然后单独检查nil。
self.frontCardView = self.backCardView
self.backCardView = self.popPersonViewWithFrame(self.backCardViewFrame())
if self.backCardView != nil {
// Fade the back card into view.
// ...
}