我试图将多个变量与表达式进行比较,如下所示:
mv
我找到了question related to comparing a variable to multiple specific
values,这不是我想要的,因为它不是不平等的比较。
有什么办法可以用任何方式缩短这个吗?
例如,缩短if 1 <= x && x <= 5 &&
1 <= y && y <= 5 &&
1 <= z && z <= 5 {
// Code to run if true
}
之类的不等式,或者让我能够以其他方式轻松比较1 <= x && x <= 5
,x
和y
?
答案 0 :(得分:2)
使用范围!
if (1...5).contains(x) &&
(1...5).contains(y) &&
(1...5).contains(z) {
}
或者,创建一个闭包来检查某些东西是否在范围内:
let inRange: (Int) -> Bool = (1...5).contains
if inRange(x) && inRange(y) && inRange(z) {
}
正如Hamish所建议的那样,Swift 4.2中的allSatisfy
方法可以实现为这样的扩展:
extension Sequence {
func allSatisfy(_ predicate: (Element) throws -> Bool) rethrows -> Bool {
return try !contains { try !predicate($0) }
}
}
答案 1 :(得分:2)
另一种选择:匹配范围元组:
if case (1...5, 1...5, 1...5) = (x, y, z) {
}
或使用switch语句匹配一个或多个 范围元组:
switch (x, y, z) {
case (1...5, 1...5, 1...5):
print("all between 1 and 5")
case (..<0, ..<0, ..<0):
print("all negative")
default:
break
}
(比较Can I use the range operator with if statement in Swift?。)
答案 2 :(得分:0)
也许是这样的:
if [x,y,z].compactMap{ (1...5).contains($0) }.contains(true) {
//Do stuff
}