swift逃逸闭包

By | 03月07日
Advertisement

定义
A closure is said to escape a function when the closure is passed as an argument to the function, but is called after the function returns. When you declare a function that takes a closure as one of its parameters, you can write @escaping before the parameter’s type to indicate that the closure is allowed to escape.
闭包描述为:当闭包作为参数被传递到一个函数的时候,但是调用却在函数return之后。当你声明一个函数,这个函数把闭包作为它的一个参数,你可以把@escaping关键字写在在参数类型之前来表明这个闭包允许逃逸。
应用
One way that a closure can escape is by being stored in a variable that is defined outside the function. As an example, many functions that start an asynchronous operation take a closure argument as a completion handler. The function returns after it starts the operation, but the closure isn’t called until the operation is completed—the closure needs to escape, to be called later. For example:
一种情况下闭包可以逃逸,闭包被存储在定义在函数外边的变量里边。例如:许多开启异步操作的函数把闭包作为完成处理程序。这个函数在开启这个异步操作之后就已经return了。但是这个闭包并不发生调用直到异步操作完成。要实现闭包后来被调用的功能,闭包需要逃逸。例如:
swift逃逸闭包

The someFunctionWithEscapingClosure(_:) function takes a closure as its argument and adds it to an array that’s declared outside the function. If you didn’t mark the parameter of this function with @escaping, you would get a compile-time error.

Marking a closure with @escaping means you have to refer to self explicitly within the closure. For example, in the code below, the closure passed to someFunctionWithEscapingClosure(:) is an escaping closure, which means it needs to refer to self explicitly. In contrast, the closure passed to someFunctionWithNonescapingClosure(:) is a nonescaping closure, which means it can refer to self implicitly.
这个函数把一个闭包做为他的一个参数并且把闭包添加到函数外边声明的一个数组中。如果你不标记这个参数为逃逸闭包的话,你将会得到一个编译错误。
创建一个逃逸闭包意味着你在闭包内部必须显示的引用self。相反,someFunctionWithNonescapingClosure(_:)是一个非逃逸闭包,这意味着它可以隐式地引用自己。
swift逃逸闭包

Similar Posts:

  • swift基本语法(总结提炼版)之012 swift 之闭包

    一:swift 之闭包就相当于objective-c中的block,先来段block代码 #import "ViewController.h" typedef void (^FINISHED)(); @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after load

  • 【Swift 】- 闭包

    闭包是自包含带函数代码块,可以在代码中被传递和使用.我觉得可以这样理解:闭包相当于C#中的lambda表达式: 全局函数和嵌套函数,实际也是特殊的闭包. 通常闭包是以下三种形式: a,全局函数是一个有名字但不会捕获任何值的闭包 b,嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 c,闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的匿名闭包 1,闭包基本语法(Closure Expression Basic Syntax) 例子:sorted函数 Swift 标准库提供了

  • Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值

    一.第一个界面 // Created by 秦志伟 on 14-6-13. import UIKit class ZWRootViewController: UIViewController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initializati

  • Swift的闭包

    文章出处:http://mobile.51cto.com/iphone-279005.htm 详解Objective-c闭包简单应用是本文要介绍的内容,主要介绍的是闭包的应用,不多说,文章中介绍的已经很详细,我们先来看内容详解. 概念介绍 这里的闭包自然是计算机语言中的闭包,词法闭包(Lexical Closure)的简称,主要表现在函数可以引用到自由变量,并且可以脱离变量的创建环境,再复杂的定义也不需要多说明了,可以理解为面向对象里面的成员函数可以调用其成员变量,然其概念却比面向对象的概念流行

  • 【note】Swift之闭包表达式的几种简化缩写形式

    完整型: rects.sort({ (first: Rectangle, second: Rectangle) -> Bool in return first.width * first.length <= second.width * second.length }) 闭包表达式的几种简化缩写形式: 自动类型判断:省略参数类型和返回值类型 rects.sort({ first, second in return first.width * first.length <= second.

  • Swift:函数和闭包

    函数 函数是一个完成独立任务的代码块,Swift中的函数不仅可以像C语言中的函数一样有函数的参数和返回值,而且还支持嵌套,并且有函数参数默认值.可变参数等. 1 //定义一个函数,注意参数和返回值,如果没有返回值可以不写返回值或者写成Void.空元组()(注意Void的本质就是空元组) 2 func sum(num1:Int,num2:Int)->Int{ 3 return num1 + num2 4 } 5 6 sum(1, 2) 可以看到Swift中的函数仅仅表示形式有所区别(定义类似于Ja

  • Swift 闭包-牛人的玩物

    闭包的概念 闭包就是一个自包含的功能块,你可以按照自己的想法在程序的任何地方使用这个功能块,还可以把功能块传来传去,那需要传哪,这就是闭包. 自包含的意思是:不依赖与其他函数的功能块,自己就能够完成一个完整的功能,能够以独立的方式供其他程序使用. 除了自包含功能块以外,闭包还有一个特异功能,它可以捕获和存储其上下文中任意的变量和常量的引用.想想嵌套函数,嵌套函数被包含在函数里面,它可以使用外面函数定义的任何变量和常量,这就是闭包的功能. 根据我们队闭包的认识,一起来看看我们代码里面的那些是闭包?

  • swift基础笔记2-闭包

    闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的 lambdas 函数比较相似. 闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift 会为您管理在捕获过程中涉及到的所有内存操作. 闭包采取如下三种形式之一: • 全局函数是一个有名字但不会捕获任何值的闭包 • 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 •

  • 学习Swift笔记 (八)Swift独立函数代码块(闭包)

    Swift独立函数代码块(闭包) 闭包是功能性自包含模块,可以在代码中被传递和使用.Swift中的闭包与C/OC中的blocks以及其他一些编程语言中的lambdas相似. 闭包可以捕获和存储它所在上下文中任意常量和变量的引用.这就是所谓的闭合并包裹着这些常量和变量,俗称闭包.Swift会为你管理在捕获过程中涉及到的内存操作. 在函数里的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包. 2. 嵌套函数是一个有名字并可以捕获其封闭函

  • Swift语言

    本文为熟悉使用Objective-C开发iOS快速转入swift开发提供一些便利的途径,没有过多华丽的说明底层原理,也没有过多的概念说明,只提供swift的基本使用以及一些使用示例.高手请让路哈. Swift中几种数据类型的简单使用,具体的可以看API文档的相关介绍. 枚举: 在其他的语言中枚举的本质是一组整形数字,通过枚举将这些整形数字跟一些有意义的名称联系起来.但是在swift中枚举并没有要求一个枚举值必须对应一个数值,你可以只单纯是一个名称,当然你也可以指定枚举值跟一些数值联系起来,同时数

Tags: