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