Swift中能否用条件数组定义布尔值?新手求简洁实现方案
Swift中简洁实现多条件全满足的布尔变量赋值
嗨,作为Swift新手碰到这种问题太正常啦~你之前用分号的写法其实踩了个小坑:在Swift里,分号是用来分隔独立语句的,所以你写的var alpha = red > 1; green > 2; blue > 3,实际上是先执行red > 1(结果被丢弃),再执行green > 2(结果也被丢弃),最后把blue > 3的结果赋值给alpha——这就是为什么你的测试结果不符合预期的原因。
下面给你两种更简洁且符合需求的实现方式:
方式一:用&&直接连接条件
如果你的条件数量是固定的,直接用逻辑与运算符&&连接所有条件是最直观的写法,和你熟悉的if语句里多条件的逻辑完全一致:
// Case 1 var red = 2 var green = 3 var blue = 4 var alpha = red > 1 && green > 2 && blue > 3 // alpha = true // Case 2 var red = 0 var green = 4 var blue = 2 var alpha = red > 1 && green > 2 && blue > 3 // alpha = false
方式二:用数组的allSatisfy方法(适合动态条件数组)
如果你的条件是动态生成的(比如从配置读取、或者数量不固定),可以把所有条件的布尔结果放进数组,然后用Swift标准库的allSatisfy(_:)方法——这个方法会遍历数组,只有当所有元素都为true时才返回true,完美匹配你“全满足才为true”的需求:
// Case 1 var red = 2 var green = 3 var blue = 4 let conditions = [red > 1, green > 2, blue > 3] var alpha = conditions.allSatisfy { $0 } // alpha = true // Case 2 var red = 0 var green = 4 var blue = 2 let conditions = [red > 1, green > 2, blue > 3] var alpha = conditions.allSatisfy { $0 } // alpha = false
甚至可以再简化一点,直接传{ $0 }或者用== true的判断,效果完全一样。
这两种方式都比if/switch的写法更简洁,而且可读性拉满~
内容的提问来源于stack exchange,提问作者Ryoko
相关产品推荐
相关产品推荐

