使用"如果让"与逻辑"或"操作者

时间:2015-12-13 10:59:20

标签: swift optional

我试图在一行if let行中编写以下代码块:

 if let amount = datasource?.incrementForCount?(count) {

        count += amount
    }

    else if let amount = datasource?.fixedIncrement {
        count += amount
    }

当我尝试类似的事情时:

 if let amount = datasource?.incrementForCount?(count) ||  let amount = datasource?.fixedIncrement {

        count += amount
    }

我遇到编译时错误。

我认为where条款对于这种情况是不可能的。

是否可以将两个if let语句合并为一个ORed语句?

2 个答案:

答案 0 :(得分:29)

尝试使用??运算符:

if let amount = datasource?.incrementForCount?(count) ?? datasource?.fixedIncrement 
{
    count += amount
}
  

是否可以将2个if语句组合成一个ORed语句?

可以有几个let语句,如

if let a = optionalA, b = optionalB { ... }

所有这些都应该返回非零值。

但如果您还想使用逻辑条件:

  1. 可能只是一个
  2. 应放在第一个地方,在任何let语句之前

答案 1 :(得分:12)

不,你不能发出两个if-let语句,甚至是一个非if-let条件的if-let语句,因为这会完全违背{{1}的目的声明。 if-let确保只有在可选项可以成功解包到变量中时才能输入语句的主体。

if-let

在上面的示例中,即使let str:String? = nil if let s = str || true { //s is nil, yet you're still in the if-let body } 为nil,您仍然会输入可选的主体,在这种情况下,您仍然需要检查s是否在主体内是否为零,呈现第一个s检查毫无意义。