带逻辑运算符的guard let

Ali*_*zin 4 swift

我如何使用guard let:

guard let value = vm.value1 || let value = vm.value2 else { return }
Run Code Online (Sandbox Code Playgroud)

我需要检查 value1,如果它有值,则继续使用它,否则检查 value2 并使用它,否则:退出。只有一个人才能有价值。

Swe*_*per 5

您描述的语义似乎是:

guard let value = vm.value1 ?? vm.value2 else { return }
Run Code Online (Sandbox Code Playgroud)

如果vm.value1不为 nil,value则将与其值绑定,并guard执行该语句后面的代码。

否则,如果vm.value2不为 nil,value则将与其值绑定,并guard执行该语句后面的代码。

否则,return就会被处决。


类似地,可以使用多个lets 来实现类似于逻辑“AND”的语义:

guard let value1 = vm.value1, let value2 = vm.value2 else { return }
Run Code Online (Sandbox Code Playgroud)

guard语句后面的代码只有在vm.value1is not nil 时才会执行,并且 vm.value2is not nil,并且value1value2绑定到相应的值。

另请注意,您也可以将任意布尔条件与let绑定混合使用:

guard let value = vm.value1, someBool || someOtherBool else { return }
Run Code Online (Sandbox Code Playgroud)