大家好我正在学习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;布尔要求。
答案 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)