执行闭包代替 if 语句的条件
Executing a closure in place of the condition of an if statement
以下作品。它打印:至少有一个为真
let arr = [false, false, false, true, false, false, true, false]
// Variable set by executing a closure...
let hasAtLeastOneTrue: Bool = {
var x = false
arr.forEach {
x = x || [=10=]
}
return x
}()
if hasAtLeastOneTrue {
print("At least one true")
} else {
print("All false")
}
是否可以通过消除常量 hasAtLeastOneTrue
并将条件替换为闭包来压缩代码?类似于:
if {CLOSURE CODE}() {
print("At least one true")
} else {
print("All false")
}
是的。关键是用方括号包裹整个闭包调用:
if ({
var x = false
arr.forEach {
x = x || [=10=]
}
return x
}()) {
print("At least one true")
} else {
print("All false")
}
虽然我认为这比 if hasAtLeastOneTrue { ...
可读性差很多。我建议你仍然命名你的闭包,或者只使用内部函数。
请注意,在这种情况下,您可以这样做:
if arr.contains(true) {
print("At least one true")
} else {
print("All false")
}
以下作品。它打印:至少有一个为真
let arr = [false, false, false, true, false, false, true, false]
// Variable set by executing a closure...
let hasAtLeastOneTrue: Bool = {
var x = false
arr.forEach {
x = x || [=10=]
}
return x
}()
if hasAtLeastOneTrue {
print("At least one true")
} else {
print("All false")
}
是否可以通过消除常量 hasAtLeastOneTrue
并将条件替换为闭包来压缩代码?类似于:
if {CLOSURE CODE}() {
print("At least one true")
} else {
print("All false")
}
是的。关键是用方括号包裹整个闭包调用:
if ({
var x = false
arr.forEach {
x = x || [=10=]
}
return x
}()) {
print("At least one true")
} else {
print("All false")
}
虽然我认为这比 if hasAtLeastOneTrue { ...
可读性差很多。我建议你仍然命名你的闭包,或者只使用内部函数。
请注意,在这种情况下,您可以这样做:
if arr.contains(true) {
print("At least one true")
} else {
print("All false")
}