Swift中的条件if语句

时间:2014-07-10 03:06:22

标签: swift conditional

我在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'

4 个答案:

答案 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.
    // ...
}