我试图在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
一个?
尝试使用??
运算符:
if let amount = datasource?.incrementForCount?(count) ?? datasource?.fixedIncrement { count += amount }
是否可以将2个if语句组合成单个ORed语句?
可以有几个let
语句,如
if let a = optionalA, b = optionalB { ... }
并且所有这些都应该返回非零值以通过.
但是如果你还想使用逻辑条件:
可能只是一个
应放在第一位,在任何let语句之前
不,你不能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
检查没有意义.