swift闭包

1.类似与OC中的block 。 反向传值 。引起代码的回调   闭包作为函数参数 condition就相当于一个闭包。in 是闭包的一个标志  参数列表和返回值类型  in  闭包所要实现的代码块  func    in。

func hasClosureMathes(arr :[Int] ,value :Int ,condition:(num:Int ,value :Int)->Bool)->Bool{

    for item1in arr{

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

            returntrue

        }

}

    returnfalse

}


var v1 = hasClosureMathes([2,11,10,10,5,5,3], value: 12) { (num, value) -> Bool in

    if num > value

  {

       return true

   }else{

        return false

    }

}

print(v1)

var v2 = hasClosureMathes([2,11,10,10,5,5,3], value: 1) { (num, value) -> Bool in

    if num < value{

        returntrue

    }else{

        returnfalse

    }

}

print(v2)

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

func hasClosure1Matches (nameArr : [String]  ,cb:(name1:String,xName :String )-> Bool) ->String {

    for name11in nameArr{

        if cb(name1:name11, xName:"小美"){

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

        }

    }

    return"咦,怎么找不到小美"

}

var v3 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb: { (name1, xName) -> Bool in

    if name1 == xName {

        returntrue

    }

    returnfalse

})

print(v3)


3.如果闭包的代码宽里面只有一句代码的话,可以省掉if和返回语句,只要判断就ok

var v4 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb: { (name1, xName) -> Bool in

     name1 == xName })

print(v3)


4.$0表示闭包传进来的第一个参数。$1表示闭包传进来的第二个参数。

var v5 = hasClosure1Matches(["luce","SuSan","张亮","小美"], cb:{

            $0 == $1

})

5.在我们实际应用的闭包。

数组的map 属性, 可以遍历数组,然后对其进行相应的操作

a.泛型,比较抽象。他会根据你进行的操作做出判断给你返回相应的值。比如你进行+操作。他就返回 Int 的数组, 如果你进行>判断  ,他就给你返回ture或者是false的值

var numbers = [12,13,22,12,23]

let mapedNnumbers = numbers.map ({

    number in

    number > 10

})

print(mapedNnumbers)

b.数组的sort方法、这个方法会自动遍历进行前后比较,如果 num1 < num2为真就会返回这两个数,如果为假 ,就会返回这两个交换过得数,从而进行排序。[12,13,22,12,23]

let sortedNumbers = numbers.sort({

    (num1 : Int,num2 :Int)->Bool in

   num1 < num2  //<  升序排序  >降序

    $0 < $1

})

print(sortedNumbers)


 总结一下函数作为参数和闭包的区别:

  本质都是一样的,引起代码的回调。 只不过是,一个直接调用函数名。闭包是直接传入代码块。在完整的闭包写法中。加入func关键字,他就是一个函数。函数去掉func  加上 in 就变成了闭包。闭包可以省去参数列表和返回值,用$0  $1...去代替。而函数不可以。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值