swift code error page 21

时间:2016-02-17 12:58:39

标签: swift function

大家好我正在学习Swift,只是浏览Apple在应用程序商店提供的书。在第21页有一些代码,对于我的生活,我无法让它工作。只是想知道是否有人可以解雇。我很确定它是一个更新的东西,但如果有人可以指点我或帮助那将是伟大的。这是从书中获取的代码(是的,我已经完全重新键入)

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, condition: lessThanTen)

然而,当我将代码放入其中时,更改它并在函数调用中显示条件arg,如下所示。我应该指出我在条件之后放了一个问号:因为我不确定什么数据类型Int - &gt;布尔要求。

I have placed a question mark after condition as I am not entirely sure what Int -> Bool is asking for.

1 个答案:

答案 0 :(得分:1)

类型Int -> Bool函数类型,它接受类型Int的单个参数,并返回类型Bool的值。从这个意义上讲,hasAnyMatches是一个更高阶的函数,因为除了整数数组之外,它还需要一个函数作为参数。因此,你可以发送,例如函数引用(到(Int) -> Bool函数)或闭包作为hasAnyMatches)的第二个参数。

下面是一个示例,使用1.函数引用调用hasAnyMatches; 2.匿名关闭; 3.预定义的闭包:

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]    

/* 1. function reference: to 'lessThanTen' function */
hasAnyMatches(numbers, condition: lessThanTen)

/* 2. anonymous (trailing) closure: (Int) -> Bool: "integer less than 0?" */
hasAnyMatches(numbers) { myInteger in myInteger < 0 }
hasAnyMatches(numbers) { $0 < 0 } /* short form */

/* 3. pre-defined closure: (Int) -> Bool: "integer larger than 0?" */
let myIntToBoolClosure : (Int) -> Bool = {
    myInteger in
    return myInteger > 0
}
hasAnyMatches(numbers, condition: myIntToBoolClosure)