Swift中OR运算第一个返回true时如何执行两侧所有函数
Swift实现非短路逻辑或的方案
Swift 中默认的||逻辑或运算符采用短路求值规则:当左侧表达式结果为true时,已经可以确定整个或运算的结果为true,所以右侧的表达式会被跳过执行,这就是你当前只输出test1的原因。
你可以通过以下两种方案实现两个函数都执行完成后再做逻辑判断的需求:
方案1:提前捕获两个函数的返回值(推荐)
先分别执行两个函数拿到返回结果,再做逻辑判断,该方案可读性最高,无需额外自定义规则,适配所有业务场景:
func run() { // 先依次执行两个函数,存储返回值 let result1 = test1() let result2 = test2() // 再用返回值做逻辑判断 if result1 || result2 { doSomething() } }
运行后即可得到你期望的输出:
test1 test2 something
方案2:自定义非短路或运算符
如果你需要类似Android/Java中单|的非短路或运算符,也可以在Swift中自定义运算符实现:
// 定义非短路或运算符,优先级和原生逻辑或保持一致 infix operator |: LogicalDisjunctionPrecedence func | (left: @autoclosure () -> Bool, right: @autoclosure () -> Bool) -> Bool { // 强制执行左右两侧表达式后再做逻辑运算 let leftRes = left() let rightRes = right() return leftRes || rightRes } // 使用自定义运算符 func run() { if test1() | test2() { doSomething() } }
注意:自定义运算符会增加代码的理解成本,仅建议在项目中大量使用非短路逻辑的场景下使用。
内容的提问来源于stack exchange,提问作者toto12344
相关产品推荐
相关产品推荐

