您的位置:首页 > 移动开发 > Swift

Swift 闭包

2015-09-24 10:31 375 查看
// 函数作为参数的情况
// 第一层函数,参数为一个数组,和一个比较的函数,返回值是一个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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: