// 函数作为参数的情况
// 第一层函数,参数为一个数组,和一个比较的函数,返回值是一个bool类型
// 比较函数,判断第一层函数传入的数组中是否有大于10的数,如果大于10返回true,如果小于10返回false cb:(num:Int, value:Int) -> Bool
func hasAnyMatches(numbers:[Int], condition:(Int)->Bool) -> Bool{
for num in numbers {
if condition(num){
return true
}
}
return false
}
func moreThanTen (num:Int) -> Bool {
if num > 10 {
return true
}else{
return false
}
}
print(hasAnyMatches([5,3,15,6,5,4], moreThanTen))
// print(hasAnyMatches([5,3,15,6,5,4], condition: moreThanTen)) // xcode7 以后的方法
// 以下是用闭包实现上面的方法
// 闭包 , 类似于OC中的block,引起代码的回调
// 闭包作为函数参数,cb就是一个闭包
func hasClosureMathes (arr:[Int], value:Int, cb:(num:Int, value:Int) -> Bool) -> Bool{
for item1 in arr {
if cb(num: item1, value: value){
return true
}
}
return false
}
// in 是闭包的一个标志,它的前面是参数列表和返回值类型,后面是实现的代码
// 函数与闭包的区别对比 就是一个有一个func 另一个有 in
var v1 = hasClosureMathes([46,65,49,15,36,26], 32) { (num, value) -> Bool in
if num < value {
return true
}else{
return false
}
}
print(v1)
print("\n")
var v2 = hasClosureMathes([22,986,695,621,61,4,631], 300) { (num, value) -> Bool in
if num < value {
return true
}else{
return false
}
}
print(v2)
// 定义一个数组,里面String类型的人名,判断数组里面是否有一个叫小美的人,如果有,返回“大家好,小美在这呢”,如果没有,返回“怎么找不到小美”
func hasClosuerMei(arr:[String], name:String, condition:(str:String, name:String) -> Bool) -> String{
for name1 in arr{
if condition(str: name1, name: name){
return ("大家好,小美在这呢")
}
}
return ("怎么找不到小美")
}
var findM = hasClosuerMei(["小d", "夺", "奇才"], "小美") { (str, name) -> Bool in
if str == name{
return true
}else{
return false
}
}
print(findM)