我试图在一行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
语句?
答案 0 :(得分:29)
尝试使用??
运算符:
if let amount = datasource?.incrementForCount?(count) ?? datasource?.fixedIncrement
{
count += amount
}
是否可以将2个if语句组合成一个ORed语句?
可以有几个let
语句,如
if let a = optionalA, b = optionalB { ... }
所有这些都应该返回非零值。
但如果您还想使用逻辑条件:
答案 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
检查毫无意义。