当前位置:  开发笔记 > 编程语言 > 正文

使用"if let"与逻辑"或"运算符

如何解决《使用"iflet"与逻辑"或"运算符》经验,为你挑选了2个好方法。

我试图在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一个?



1> Avt..:

尝试使用??运算符:

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

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

可以有几个let语句,如

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

并且所有这些都应该返回非零值以通过.

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

    可能只是一个

    应放在第一位,在任何let语句之前



2> TheBaj..:

不,你不能OR两个if-let语句,甚至是if-let一个非if-let条件的语句,因为这会完全违背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
}

在上面的例子中,即使s是nil,你仍然会进入可选体,在这种情况下,你仍然需要检查s体内是否为零,使第一次if-let检查没有意义.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有