能否将立即执行闭包直接作为Swift中if语句的判断条件?
问题解答
可以直接省略常量hasAtLeastOneTrue,将立即执行闭包放在if语句的条件位置,该写法完全符合Swift语法规则。
对应实现代码
let arr = [false, false, false, true, false, false, true, false] if { var x = false arr.forEach { x = x || $0 } return x }() { print("At least one true") } else { print("All false") }
原理解释
这种写法成立的核心是立即执行闭包会在当前代码位置直接运行,并返回对应类型的结果。你写的闭包返回值为Bool类型,刚好匹配if条件对布尔值的要求,运行输出结果和原有写法完全一致。
更简洁的优化方案
Swift数组原生提供了contains方法,可以直接实现判断数组是否包含true的需求,不需要手动写遍历逻辑:
let arr = [false, false, false, true, false, false, true, false] if arr.contains(true) { print("At least one true") } else { print("All false") }
内容的提问来源于stack exchange,提问作者Kaplan
相关产品推荐
相关产品推荐

