Swift-闭包

作者: 司马捷 | 来源:发表于2016-05-26 21:05 被阅读90次
    (一)什么是闭包?

    闭包和函数一个概念,是一致的,之外还有自己的特性.

    arr.sort() //传一个闭包和传一个函数 是一个结果. 看如下代码:
    

    准备一个数组:

    var arr:[Int] = []
    
    for _ in 0...10{
        arr.append(random()%1000)
    }
    

    传一个函数例子:

    先定义一个函数
    func biggerNumberFirst(a:Int,_ b:Int)->Bool{
    
        return a > b
    }
    
    调用函数
    var newArray = arr.sort(biggerNumberFirst)
    

    传一个闭包:

    arr.sort({
        (a:Int,b:Int)->Bool in
        return a>b
    })
    
    (二)闭包的简写方式

    还有几种简写方式:
    一种:由于在sort方法的声明中,函数的参数类型和返回值类型都已经被定义了.

     arr.sort({a,b in return a>b})
    

    一种:由于sort方法中已经规定了必须有返回值,而且我们的返回只有一行代码,就可以写成下面这种形式

    arr.sort({a,b in a>b})
    

    一种使用swift提供的默认变量形式

    arr.sort({$0>$1})
    

    还有一种是:在swift中,><号 就是一种函数

    arr.sort(>)
    

    当闭包是这个方法的最后一个参数:可以简写成

    var newarr = arr.sort (){ (a, b) -> Bool in
         return a>b
    }
    

    当闭包是这个方法的最后一个参数,且只有一个闭包参数的时候:函数名后面的小括号也可以省略,可以简写成

    var newarr = arr.sort{ (a, b) -> Bool in
         return a>b
    }
    
    (三)闭包的特性---内容捕获
    var num = 700
    
    arr.sort {
        a, b in
        abs(a-num) < abs(b-num)
    }
    

    基本数据类型,在闭包中的内存问题,不会有什么问题.

    (四)闭包和函数是引用类型.

    定义一个返回函数的一个函数.

    func runningMetersWithMetersPerDay(metersPerDay:Int) -> ()->Int {
    
        var totalMeters = 0
    
        return {
            totalMeters += metersPerDay
            return totalMeters
        }
    }
    var planA = runningMetersWithMetersPerDay(100)
    planA() //100
    planA()  //200
    
    var anoterPlan = planA  //在这里将函数赋值给了另外一个变量 从下面结果看,其实也就是给变量起了另外一个名字.anoterPlan.不管调用哪个,都是后面指定的内存起作用.
    
    anoterPlan() //300
    planA() //400
    

    相关文章

      网友评论

        本文标题:Swift-闭包

        本文链接:https://www.haomeiwen.com/subject/oyrxdttx.html