首页 > 代码库 > Swift-7-闭包
Swift-7-闭包
// Playground - noun: a place where people can playimport 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 clouressomeFunctionTakesCloures() { // 这里实现闭包}// 如果闭包是该方法的唯一参数并且你使用了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 没有参数,但是它可以从上下文中捕获变量使用
Swift-7-闭包
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。