美文网首页
Swift 2 学习笔记 9.闭包

Swift 2 学习笔记 9.闭包

作者: Maserati丶 | 来源:发表于2018-11-21 20:28 被阅读0次

    课程来自慕课网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
    

    相关文章

      网友评论

          本文标题:Swift 2 学习笔记 9.闭包

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