Swift 2 学习笔记 9.闭包

2018-11-21  本文已影响0人  Maserati丶

课程来自慕课网liuyubobobo老师


闭包
// 产生一个随机数组
var arr: [Int] = []
for _ in 0..<100 {
    arr.append(Int(arc4random()%1000))
}
// 按从大到小排序
func biggerNumberFirst (a: Int , b: Int) -> Bool {
    return a > b
}
arr.sorted(by: biggerNumberFirst)
// 使用闭包 按从小到大排序
arr.sorted(by: {(_ a: Int, _ b: Int) -> Bool in
    return a > b
})
arr.sorted(by: {(_ a: Int, _ b: Int) -> Bool in
    return a > b
})

arr.sorted(by: {(_ a: Int, _ b: Int) -> Bool in return a > b})

arr.sorted(by: {a, b in return a > b})

arr.sorted(by: {a, b in a > b})

arr.sorted(by: {$0 > $1})

arr.sorted(by: >)
arr.sorted(by: {a, b in return a > b})
// 闭包也可以作为一个尾随闭包被书写在 sorted(by:) 方法的括号外面
arr.sorted(){a, b in return a > b}
// 如果闭包表达式是函数唯一的实际参数并且你把闭包表达式用作尾随闭包
// 那么调用这个函数的时候你就不需要在函数的名字后面写一对圆括号
arr.sorted{a, b in return a > b}
// 产生一个随机数组
var arr: [Int] = []
for _ in 0..<100 {
    arr.append(Int(arc4random()%1000))
}

// 按最接近500排序
arr.sort(){(a, b) -> Bool in abs(a-500) < abs(b-500) }

//闭包能够从上下文捕获已被定义的常量和变量
let num = 700
arr.sort(){(a, b) -> Bool in abs(a-num) < abs(b-num) }
func runningMeters(with metersPerDay: Int) -> () -> Int {
    var totalMeters = 0
    return {
        totalMeters += metersPerDay
        return totalMeters
    }
}

// planA 是一个 ()->Int 的函数
var planA = runningMeters(with: 3000)
// planA() 只执行了闭包,闭包中的参数通过内容捕获获取值
planA()  // 3000
planA()  // 6000
planA()  // 9000

var anotherPlan = planA
anotherPlan()  // 12000
planA()  // 15000

planA = runningMeters(with: 3000)
planA()  //3000
上一篇 下一篇

猜你喜欢

热点阅读