快速可变参数闭包语法?



我已经读过这篇文章,但需要一些额外的帮助。

我想构造一个闭包,它接受可变数量的双精度,将它们与阈值(也是双精度(进行比较,并返回一个布尔值,检查是否所有条目都大于阈值。返回类型应(Double...) -> Bool

这是我到目前为止所拥有的:

func isAllAbove(lower: Double) -> (Double...) -> Bool {
return {
var conditions: [Bool] = []
for i in 0...$0.count {
conditions.append(lower < $0[i])
}
return !conditions.contains(false)
}
}

但是,编译器抱怨

无法将类型"(_( -> _"的返回表达式转换为返回类型"(双精度...(-> Bool">

为什么会发生这种情况,我该如何解决这个问题?谢谢!

尝试在闭包中指定参数类型和返回类型,以帮助编译器了解它应该取什么值并返回什么值。此外,您在循环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 { $0 < lower }
print(isAllAbove1) // false

相关内容

  • 没有找到相关文章

最新更新