Swift4-闭包

作者: wingsrao | 来源:发表于2018-08-09 10:55 被阅读51次

闭包

1.闭包是可以在你的代码中被传递和引用的功能性独立模块。
闭包符合如下三种形式中的一种:

  • 全局函数是一个有名字但不会捕获任何值的闭包;
  • 内嵌函数是一个有名字且能从其上层函数捕获值的闭包;
  • 闭包表达式是一个轻量级语法所写的可以捕获其上下文中常量或变量值的没有名字的闭包。
    常见的优化包括:
  • 利用上下文推断形式参数和返回值的类型;
  • 单表达式的闭包可以隐式返回;
  • 简写实际参数名;
  • 尾随闭包语法。
func backward(_ s1: String, _ s2: String) -> Bool {
    return s1 > s2
}
var reversedNames = names.sorted(by: backward)
// reversedNames is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]

2.闭包表达式语法

{ (parameters) -> (return type) in
    statements
}
//例子
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
    return s1 > s2
})

闭包表达式语法能够使用常量形式参数、变量形式参数和输入输出形式参数,但不能提供默认值。可变形式参数也能使用,但需要在形式参数列表的最后面使用。元组也可被用来作为形式参数和返回类型。

3.从语境中推断类型

reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )

4.从单表达式闭包隐式返回

reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

5.简写的实际参数名:Swift 自动对行内闭包提供简写实际参数名,你也可以通过 0 ,1 , $2 等名字来引用闭包的实际参数值。

reversedNames = names.sorted(by: { $0 > $1 } )

6.运算符函数

reversedNames = names.sorted(by: >)

7.尾随闭包:

func someFunctionThatTakesAClosure(closure:() -> Void){
    //function body goes here
}
//here's how you call this function without using a trailing closure
someFunctionThatTakesAClosure({
    //closure's body goes here
})
//here's how you call this function with a trailing closure instead
someFunctionThatTakesAClosure() {
    // trailing closure's body goes here
}

8.捕获值:作为一种优化,如果一个值没有改变或者在闭包的外面,Swift 可能会使用这个值的拷贝而不是捕获。
Swift也处理了变量的内存管理操作,当变量不再需要时会被释放。

9.当闭包作为一个实际参数传递给一个函数的时候,我们就说这个闭包逃逸了,形式参数前写 @escaping 来明确闭包是允许逃逸的。

10.自动闭包是一种自动创建的用来把作为实际参数传递给函数的表达式打包的闭包。
自动闭包允许你延迟处理,因此闭包内部的代码直到你调用它的时候才会运行。对于有副作用或者占用资源的代码来说很有用,因为它可以允许你控制代码何时才进行求值。

var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(customersInLine.count)
// Prints "5"
let customerProvider = { customersInLine.remove(at: 0) }
print(customersInLine.count)
// Prints "5"
print("Now serving \(customerProvider())!")
// Prints "Now serving Chris!"
print(customersInLine.count)
// Prints "4"

11.通过 @autoclosure 标志标记它的形式参数使用了自动闭包

相关文章

  • Swift4-闭包

    闭包 1.闭包是可以在你的代码中被传递和引用的功能性独立模块。闭包符合如下三种形式中的一种: 全局函数是一个有名字...

  • swift-闭包

    闭包 闭包定义 闭包简化 - 尾随闭包 闭包参数 闭包返回值 闭包的循环引用

  • 闭包,闭包,闭包

    1、这家伙到底是什么? 网上关于这个的讨论的太多了太多了,有各种的举例子,但是大部分还在寻找这个答案的小伙伴对于变...

  • 闭包-Closures [swift 5.1]

    闭包的语法 尾随闭包 闭包逃离 自动闭包

  • Day7 闭包(Closures)

    本页包含内容:• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包 1、闭包表达式 闭包...

  • Python闭包

    闭包 = 环境变量 + 函数 调用闭包内部的环境变量 闭包的经典误区 闭包与非闭包实现人类走路 非闭包 闭包

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • swift- 闭包一

    /*• 闭包表达式• 尾随闭包• 值捕获• 闭包是引用类型• 逃逸闭包• 自动闭包*/

  • (9) python之闭包

    闭包闭包 = 函数 + 环境变量(函数定义的时候) 一个最简单的闭包 闭包不受外部变量影响 非闭包 闭包 闭包 只...

  • Swift-进阶 :闭包(二)逃逸闭包 & 非逃逸闭包

    本文主要分析逃逸闭包 、非逃逸闭包、自动闭包 逃逸闭包 & 非逃逸闭包 逃逸闭包定义 当闭包作为一个实际参数传递给...

网友评论

    本文标题:Swift4-闭包

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