Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift中的条件if语句_Swift_Conditional - Fatal编程技术网

Swift中的条件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

我在Objective-C中遇到了一个条件if语句:

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中的相同条件。