Swift速成:捕获列表

881 查看

这是一系列短文中的第一篇,会简单介绍些你可能不知道的东西。我也会努力尝试穿插写些更深入的长文。

捕获列表

很多人不知道Swift中可以显式地指定闭包的捕获列表。

闭包封盖了局部环境变量,并为闭包内的代码创建了一个新的执行环境。Objective-C代码块或C#的lambda都是闭包的例子。假如你希望真正了解闭包,执行环境,命名绑定等,我推荐计算机程序的构造和解释这些过时但极优秀的视频列表

通过标记self为unowned或者用weak来打破 retain cycle,这种方法常常用来修改闭包捕获的这个 self 的属性

苹果官方语言指南要求如果闭包和其捕获的对象相互引用,应该使用unowned,这样能够保证他们会同时被销毁。这大概是为了避免对象被释放后维护weak引用空指针的开销。

函数

大部分人没有意识到自己可以创建如下新的命名变量:

这避免了引用thing1thing2时污染周围代码。作为加分项,thing2还是个weak引用。

捕获列表需要尾随in关键字,并且紧跟着参数列表假如你有需要:

元(meta)

这是这篇短文的所有。假如你有任何建议和纠错请告知我。