Swift 可变闭包语法?
Swift Variadic Closures Syntax?
我已阅读 ,但需要一些额外的帮助。
我想构建一个闭包,它接受可变数量的双精度值,将它们与阈值(也是双精度值)进行比较,returns 一个布尔值检查是否所有条目都大于阈值. return 类型应该是 (Double...) -> Bool
这是我目前的情况:
func isAllAbove(lower: Double) -> (Double...) -> Bool {
return {
var conditions: [Bool] = []
for i in 0...[=11=].count {
conditions.append(lower < [=11=][i])
}
return !conditions.contains(false)
}
}
然而,编译器抱怨
Cannot convert return expression of type '(_) -> _' to return type '(Double...) -> Bool'
为什么会发生这种情况,我该如何解决?谢谢!
尝试在闭包中指定参数类型和return类型,以帮助编译器理解它应该取什么值和return。另外,你在 for
循环中有一个错误。间隔应该是这样的 0 ..< values.count
:
func isAllAbove(lower: Double) -> (Double...) -> Bool {
return { (values: Double...) -> Bool in
var conditions: [Bool] = []
for i in 0 ..< values.count {
conditions.append(lower < values[i])
}
return !conditions.contains(false)
}
}
let allAbove = isAllAbove(lower: 2)
print(allAbove(1, 2, 3)) // false
而且,你几乎可以用1行代码写出来:
let lower = 2
let isAllAbove = ![1, 2, 3].contains { [=11=] < lower }
print(isAllAbove1) // false
我已阅读
我想构建一个闭包,它接受可变数量的双精度值,将它们与阈值(也是双精度值)进行比较,returns 一个布尔值检查是否所有条目都大于阈值. return 类型应该是 (Double...) -> Bool
这是我目前的情况:
func isAllAbove(lower: Double) -> (Double...) -> Bool {
return {
var conditions: [Bool] = []
for i in 0...[=11=].count {
conditions.append(lower < [=11=][i])
}
return !conditions.contains(false)
}
}
然而,编译器抱怨
Cannot convert return expression of type '(_) -> _' to return type '(Double...) -> Bool'
为什么会发生这种情况,我该如何解决?谢谢!
尝试在闭包中指定参数类型和return类型,以帮助编译器理解它应该取什么值和return。另外,你在 for
循环中有一个错误。间隔应该是这样的 0 ..< values.count
:
func isAllAbove(lower: Double) -> (Double...) -> Bool {
return { (values: Double...) -> Bool in
var conditions: [Bool] = []
for i in 0 ..< values.count {
conditions.append(lower < values[i])
}
return !conditions.contains(false)
}
}
let allAbove = isAllAbove(lower: 2)
print(allAbove(1, 2, 3)) // false
而且,你几乎可以用1行代码写出来:
let lower = 2
let isAllAbove = ![1, 2, 3].contains { [=11=] < lower }
print(isAllAbove1) // false