Swift 闭包

来源:互联网 发布:软件标识 编辑:程序博客网 时间:2024/06/05 07:49

// 函数作为参数的情况

// 第一层函数,参数为一个数组,和一个比较的函数,返回值是一个bool类型

// 比较函数,判断第一层函数传入的数组中是否有大于10的数,如果大于10返回true,如果小于10返回false                     cb:(num:Int, value:Int) -> Bool

func hasAnyMatches(numbers:[Int], condition:(Int)->Bool) ->Bool{

    for numin numbers {

        if condition(num){

            returntrue

        }

    }

    returnfalse

}


func moreThanTen (num:Int) ->Bool {

    if num > 10 {

        returntrue

    }else{

        returnfalse

    }

}

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 item1in arr {

        if cb(num: item1, value: value){

            returntrue

        }

    }

    returnfalse

}

// in 是闭包的一个标志,它的前面是参数列表和返回值类型,后面是实现的代码

// 函数与闭包的区别对比 就是一个有一个func 另一个有 in

var v1 = hasClosureMathes([46,65,49,15,36,26], 32) { (num, value) ->Bool in

    if num < value {

       returntrue

    }else{

       returnfalse

    }

}

print(v1)

print("\n")


var v2 = hasClosureMathes([22,986,695,621,61,4,631], 300) { (num, value) ->Bool in

    if num < value {

        returntrue

    }else{

        returnfalse

    }

}

print(v2)


// 定义一个数组,里面String类型的人名,判断数组里面是否有一个叫小美的人,如果有,返回“大家好,小美在这呢”,如果没有,返回“怎么找不到小美”

func hasClosuerMei(arr:[String], name:String, condition:(str:String, name:String) -> Bool) ->String{

    for name1in arr{

        if condition(str: name1, name: name){

            return ("大家好,小美在这呢")

        }

    }

    return ("怎么找不到小美")

}

var findM = hasClosuerMei(["小d","夺", "奇才"],"小美") { (str, name) -> Boolin

    if str == name{

        returntrue

    }else{

        returnfalse

    }

}

print(findM)

0 0
原创粉丝点击