swift的功能,取其参数的另一个功能

时间:2014-06-04 10:14:16

标签: swift

func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}

func lessThanTen(number: Int) -> Bool {
    return number < 10
}

var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanTen)

这是关于 Swift编程语言的例子。

但是在这个例子中,我想要改变

func lessThanTen(number: Int) -> Bool {
    return number < 10
}

func lessThanBenchmark(number: Int, benchMark: Int) -> Bool {
    return number < 10
}

所以我也将这个例子改为

func hasAnyMatches(list: Int[], condition: (Int, benchmark: Int) -> Bool) -> Bool {
    for item in list {
        if condition(item, benchmark) {
            return true
        }
    }
    return false
}

func lessThanBenchmark(number: Int, benchmark: Int) -> Bool {
    return number < benchmark
}

var numbers = [20, 19, 7, 12]
hasAnyMatches(numbers, lessThanBenchmark)

然而,我收到了一个错误。

<REPL>:155:28: error: use of unresolved identifier 'benchmark'
        if condition(item, benchmark) {

最后,我必须像这样写作

func hasAnyMatches(list: Int[], condition: (Int, Int) -> Bool, benchmark:Int) -> Bool {
    for item in list{
        if condition(item, benchmark) {
            return true
        }
    }
    return false
}

func lessThanBenchmark(number: Int, benckmark: Int) -> Bool {
    return number < benckmark
}

var numbers = [20, 19, 7,12]
hasAnyMatches(numbers, lessThanBenchmark, 10)

如何将基准传递给条件,就像它自己的参数一样?

1 个答案:

答案 0 :(得分:0)

基准是功能的论据。

condition: (Int, benchmark: Int) -> Bool

这行代码意味着condition是一个返回Bool值的函数,可以接受两个参数:Int作为第一个参数,而benchmark:Int是第二个参数。

您可以在条件内调用基准。

像那样说:

func hasAnyMatches(list: Int[], condition: (Int, benchmark: Int) -> Bool) -> Bool {
    for item in list {
        if condition(item, benchmark: 15) {
            return true
        }
    }
    return false
}

15是您要使用的值