Swift-闭包

(一)什么是闭包?

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

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中的闭包与 C 和 Objective-C中的 blo...
    AirZilong阅读 198评论 0 2
  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objective-C 中的代...
    穷人家的孩纸阅读 1,383评论 1 5
  • 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。 这被称为关闭这些常量和变量。 Swift处理所有的...
    Joker_King阅读 327评论 0 2
  • * 闭包 是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包和Objective-C中的代码块(b...
    EndEvent阅读 677评论 4 8
  • 闭包是自包含的代码块,可以在代码中被传递和使用。Swift中的闭包与C和Objective-C中代码块(block...
    Raaaaamsey阅读 606评论 0 2
  • 匆匆/匆匆的 陷入熙攘人流 我们 在各自的城市里 没有交集 那张五月十四号的机票 已经过期 我们变成/我和你 以前...
    亦弋阅读 105评论 0 1
  • 俗话说万事开头难,任何事情从一个好举意开始,之后便是坚持不懈,直到成功。最重要的是,你要相信自己做的事是正确的,假...
    马石头阅读 168评论 1 2
  • 四、复课的风波 1994年,我高中毕业后成绩很差,只考了365分。 我原本是不想高考的,因为成绩太差,再加上学校为...
    亦农阅读 264评论 3 17