Swift程序员iOS,object-c和swift开发

Swift-闭包

2016-05-26  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读