• Swift-7-闭包


    // Playground - noun: a place where people can play
    
    import UIKit
    
    // swift 中闭包与C和OC中的blocks比较相似
    // 1. 利用上下文推断参数和返回值类型 2. 单表达式闭包可以省略return关键字 3. 参数名称简写 4. Trailing闭包语法
    // 闭包表达式 in 表示 参数及返回值 已经表达完毕,后面是包体
    /**
        {(parmeters) -> return type in 
            statements
        }
    */
    
    var names = ["Anna", "Alex", "Ewa", "Barry", "Daniella"]
    sorted(names, { (s1 : String, s2 : String) -> Bool in
        return s1 > s2 // 单表达式闭包可以省略return关键字 此处的return可以省略
    })
    
    // 从上下文推断类型
    // 当闭包作为参数方法参数使用时,因为方法内的参数已经有类型了(String, String) -> Bool ,swift可以从上下文推断出该闭包的参数与返回值,因此闭包的参数和返回值可以省略
    sorted(names, { s1, s2 in
        return s1 > s2
    })
    
    // 参数名简写 使用 $ + 数字 引用推断出的参数 0 表示第一个
    sorted(names, {return $0 > $1}) // 这里官方文档说return可以省略,但是Xcode一直报错说有歧义 解决办法 {$0 as String > $1 as String} 明确声明$0 $1为String即可
    
    // swift 中对于 string  >方法表示接收2个String类型的参数,返回一个Bool值,刚好和闭包吻合,可以直接传入
    sorted(names, >)
    
    // Trailing Cloures 使用情景:如果你使用了一个闭包作为一个方法的最后一个参数并且闭包很长
    func someFunctionTakesCloures(cloures : () -> ()) {
        println("do some thing")
    }
    
    // 不使用trailing cloures调用
    someFunctionTakesCloures({
        // 这里实现闭包
    })
    
    // 使用trailing cloures
    someFunctionTakesCloures() {
        // 这里实现闭包
    }
    
    // 如果闭包是该方法的唯一参数并且你使用了trailing cloures,调用方法时可以省略 ()
    someFunctionTakesCloures {
        // 这里实现闭包
    }
    
    // 使用trailing cloures调用sorted方法
    sorted(names) {return $0 > $1}
    
    // 捕获值
    func makeInCrementor(forIncrement amount: Int) -> () -> Int {
        var runningTotal = 0
        func incrementor() -> Int {
            runningTotal += amount
            return runningTotal
        }
        return incrementor
    }
    // 方法 incrementor 没有参数,但是它可以从上下文中捕获变量使用
  • 相关阅读:
    pid系统控制算法
    pandas+numpy 对df数据中的某列进行等分分桶操作
    pandas学习
    angular6 数组遍历项进行双向绑定 丢失焦点 问题解决
    TypeScript 之构造器 constructor 方法 methods
    公开便民信息网站收集
    C++11_线程池
    百度网盘信息
    【赵强老师】MongoDB中的索引(下)
    TDSQL 4001 备份故障处理案例
  • 原文地址:https://www.cnblogs.com/liufeng24/p/4117189.html
Copyright © 2020-2023  润新知