[绍棠_Swift] Swift中的@noescape @escaping @autoclosure
来源:互联网 发布:vb语言视频教程 编辑:程序博客网 时间:2024/06/06 03:57
@noescape 非逃逸闭包
当闭包作为参数传递进函数时,如果这个闭包只在函数中被使用
,则开发者可以将这个闭包声明成非逃逸的,即告诉系统当此函数结束后,这个闭包的生命周期也将结束,这样做的好处是可以提高代码性能,将闭包声明成非逃逸的类型使用@noescape关键字。
(1) 默认,swift 3.0 弃用,函数结束后,这个闭包的生命周期也将结束。
(2) 在其内部如果需要使用self这个关键字,self可以被省略。
@escaping 逃逸闭包
逃逸的闭包常用于异步的操作,这类函数会在异步操作开始之后立刻返回,但是闭包直到异步操作结束后才会被调用
。例如这个闭包是异步处理一个网络请求,只有当请求结束后,闭包的生命周期才结束。当闭包作为函数的参数传入时,很有可能这个闭包在函数返回之后才会被执行。
@autoclosure 自动闭包
(1)默认非逃逸
(2)闭包也可以被自动的生成,这种闭包被称为自动闭包,自动闭包自动将表达式封装成闭包。
(3)自动闭包不接收任何参数
,被调用时会返回被包装在其中的表达式的值。
(4)当闭包作为函数参数时,可以将参数标记 @autoclosure 来接收自动闭包。
(5)自动闭包能够延迟求值,因为代码段不会被执行直到你调用这个闭包。
(6)自动闭包默认是非逃逸的,如果要使用逃逸的闭包,需要手动声明: @autoclosure @escaping
旧版本:@autoclosure(escaping)
//(a)自动闭包演示
var students = ["A","B","C"]
let studentsProvider = { students.remove(at: 0) }//自动闭包自动将表达式封装成闭包
studentsProvider()
//(b)自动闭包演示
var list = [1,2,3,4,5,6]
//创建一个显式闭包
let closures = {
list.append(7)
}
print(list) //将打印[1,2,3,4,5,6]
closures()
print(list) //引用传递,将打印[1,2,3,4,5,6,7]
// ( 尾随闭包(Trailing Closures) -先声明一个函数)
func func1(closure: ()->Void) ->Void {
//执行显式的闭包
closures()
}
func func2(auto:@autoclosure ()->Void) ->Void {
//执行自动闭包
auto()
}
//显式闭包
func1(closure: closures)
print(list) //将打印[1,2,3,4,5,6,7,7]
//将表达式自动生成闭包
func2(auto: list.append(8))
print(list) //将打印[1,2,3,4,5,6,7,7,8]
- [绍棠_Swift] Swift中的@noescape @escaping @autoclosure
- @noescape @escaping @autoclosure
- @noescape @escaping @autoclosure
- Swift中autoclosure和noescape关键字
- swift_041(Swift的@noescape和@escaping)
- Swift之自动闭包(@autoclosure、@noescape、@escape)
- [绍棠_Swift] Swift中的回调传值
- [绍棠_swift] Swift中的结构体
- [绍棠_swift] Swift中的继承、构造器
- [绍棠_Swift] Swift
- swift @noescape有啥卵用
- Swift中@noescape介绍
- Swift中@noescape介绍
- [绍棠_Swift] Swift排序方法汇总
- swift3.0中@escaping 和 @noescape 的含义
- swift3.0中@escaping 和 @noescape 的含义
- [绍棠_Swift] Swift3.0中的GCD
- [绍棠_swift] swift 中#pragma mark 表示方法
- 二十三种设计模式之观察者模式简述
- Eclipse 集成spring tool suite 过程中报错
- 关闭 G2 的体验改进计划打点请求 https://kcart.alipay.com/web/bi.do
- 排序算法(三):JAVA实现直接插入排序
- NodeJS基础和常用API
- [绍棠_Swift] Swift中的@noescape @escaping @autoclosure
- 225. Implement Stack using Queues 解答
- RecyclerView的监听与简介的上拉刷新
- sql基础拾遗
- 关于debug
- 临时文件
- mybatis对时间段查询以及转义字符
- java SimpleDateFormat线程安全
- day_06_拷贝构造、拷贝赋值、静态成员