美文网首页
Swift中的闭包表达式

Swift中的闭包表达式

作者: im_panlei | 来源:发表于2016-02-17 15:51 被阅读117次

闭包是自包含的函数代码块,可以在代码中被传递和使用
闭包可以捕获和存储其所在上下文中的任意常量和变量的引用

Swift 闭包表达式具有简洁的风格,主要的语法优化如下:

  1. 利用上下文推断参数和返回值类型
  2. 隐式返回单表达式闭包,就是单表达式闭包可以省略return关键字
  3. 参数名称缩写
  4. 尾随闭包语法(Trailing Closure Syntax)

闭包表达式语法

{
  (parameters)->ReturnType in
    statements
}  

闭包表达式的优化过程
Swift 标准库中提供了名为sort的方法对数组进行排序,sort方法接受一个闭包函数作为参数,下面提供通过函数排序的代码:

let numbers = [1,4,3,5,8,7,6,2]
func compare(a:Int,b:Int)->Bool{
    return a < b
}
numbers.sort(compare) //numbers = [1,2,3,4,5,6,7,8]

下面把函数换成闭包:

let numbers = [1,4,3,5,8,7,6,2]
numbers.sort({
                (a:Int ,b:Int)->Bool in
                return a < b
            })
//numbers = [1,2,3,4,5,6,7,8]

由于Sort函数可以推断出闭包函数的参数类型和返回值类型为(Int,Int)->Bool,所以闭包表达式可以简化为(语法优化1):

let numbers = [1,4,3,5,8,7,6,2]
numbers.sort({a,b in return a < b})
//numbers = [1,2,3,4,5,6,7,8]

由语法优化2 还可以进一步优化代码:

let numbers = [1,4,3,5,8,7,6,2]
numbers.sort({a,b in a < b})
//numbers = [1,2,3,4,5,6,7,8]

Swift自动为内联函数闭包提供参数缩写功能,可以直接通过 $0,$1,$2... 来顺序调用闭包的参数,如果在闭包表达式中使用参数名称缩写,可以在闭包参数列表中省略对其的定义,并且对应参数名称缩写的类型会通过函数类型进行推断。 in 关键字也同样可以被省略,因为此时闭包表达式完全由闭包函数体构成(语法优化3):

let numbers = [1,4,3,5,8,7,6,2]
numbers.sort({ $0 < $1 })
//numbers = [1,2,3,4,5,6,7,8]

尾随闭包
如果一个函数的最后一个参数是一个闭包函数类型,为了简化代码可以使用尾随闭包,例如:

func functionWithClosure(closure:(Int,Int)->Int){
    print(closure(2,3))
}
//调用函数
functionWithClosure(){
    return $0 + $1 //打印出 5
}
//如果函数只需要闭包表达式一个参数可以把 () 去掉
functionWithClosure{
  $0 + $1 //打印出 5
}
//sort函数也可以写成这样
let numbers = [1,4,3,5,8,7,6,2]
numbers.sort(){ $0 < $1 }

写这篇文章的目的主要是为了巩固一下闭包的知识,因为在实际写代码的时候老是对闭包的语法模糊不清,如有错误之处,还望批评指正。

相关文章

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • swift 闭包与闭包表达式

    闭包与闭包表达式 在swift里闭包大家都很熟悉,相当于oc中的block。闭包表达式又是啥?很多人把闭包表达式等...

  • Swift 5基础语法要点整理—闭包

    闭包 闭包表达式 在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 闭包表达式的简写...

  • Swift语法 -- [07 - 闭包]

    在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 1 闭包表达式 闭包表达式 闭包表...

  • Swift-闭包

    闭包表达式 在swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 闭包表达式简写 尾随闭...

  • 闭包

    闭包 本节内容包括: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 Swift 中的闭包与 C 和 Objecti...

  • 闭包

    闭包表达式 在swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数 闭包表达式的简写 尾随...

  • Swift--闭包

    闭包表达式 在Swift中,可以通过 func定义一个函数,也可以通过闭包表达式定义一个函数 闭包表达式的简写 尾...

  • 第六节 闭包表达式与闭包

    一. 闭包表达式 1. 闭包表达式 在swift中可以通过 func 定义一个函数,也可以通过闭包表达式定义一个函...

网友评论

      本文标题:Swift中的闭包表达式

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