SwiftUI 内功教程之Closures 10 闭包是引用类型及经典用法
2023-09-11 14:18:31 时间
SwiftUI 内功教程之Closures 10 闭包是引用类型及经典用法
什么是闭包
闭包是独立的功能块,可以在代码中传递和使用。Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。这称为关闭这些常量和变量。Swift为您处理捕获的所有内存管理.
闭包是引用类型
闭包可以从定义它的周围环境中捕获常量和变量
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
闭包是引用类型
在上面的示例中,incrementBySeven和incrementByTen是常量,但是这些常量引用的闭包仍然能够增加runningTotal它们已捕获的变量。这是因为函数和闭包是引用类型。
每当您将函数或闭包分配给常量或变量时,实际上就是在将该常量或变量设置为对该函数或闭包的引用。在上面的例子中,它是闭合的,所述选择incrementByTen 指的是是恒定的.
这也意味着,如果将闭包分配给两个不同的常量或变量,则这些常量或变量都引用同一闭包。
let alsoIncrementByTen = incrementByTen
alsoIncrementByTen()
// returns a value of 50
incrementByTen()
// returns a value of 60
上面的示例显示调用alsoIncrementByTen与相同incrementByTen。因为它们都引用相同的闭包,所以它们都递增并返回相同的运行总计。
相关文章
- 我读经典(7):读《程序猿生存定律》有感
- POJ 1700 经典过河问题(贪心)
- 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 2
- 一段经典模拟退火算法代码
- C语言经典算法 11-20
- 2019年NLP百篇经典论文及网址
- 《PHP、MySQL和Apache入门经典(第5版)》一一2.8 MySQL权限系统简介
- 《iOS 9应用开发入门经典(第7版)》——第2章,第2.2节使用iOS模拟器
- 《Adobe Dreamweaver CC经典教程》——导读
- 《Adobe Dreamweaver CS6中文版经典教程》——2.2 HTML起源于何处
- 《Adobe Dreamweaver CS6中文版经典教程》——2.3 编写你自己的HTML代码
- 《Adobe Dreamweaver CS6中文版经典教程》——导读
- 《Adobe Flash CS6中文版经典教程》——1.10 修改内容和舞台
- 《Adobe Flash Professional CC经典教程》——1.12 发布影片
- 《Adobe Flash Professional CC经典教程》——1.14 检查更新
- 《Adobe Flash CS4 ActionScript 3.0中文版经典教程》——导读
- 《Adobe Flash CS4中文版经典教程》——1.4 了解“时间轴”
- 《Adobe Flash CS4中文版经典教程》——1.6 使用“属性”检查器
- 《Adobe Flash CS4中文版经典教程》——1.10 发布影片
- 《Adobe Dreamweaver CS5中文版经典教程》——导读
- 《Adobe Fireworks CS5中文版经典教程》——1.4 配置面板和面板组
- 《Adobe Fireworks CS5中文版经典教程》——导读
- 《Adobe Flash CS5 ActionScript 3.0中文版经典教程》——1.3 使用代码片断添加ActionScript
- 《Adobe Flash CS5中文版经典教程》——1.2 了解工作区
- 《机器人学经典教程》——导读
- 《HTML与CSS入门经典(第8版)》——1.8 作业
- 《Swift入门经典(第2版)》——1.3 小结
- 《Swift入门经典(第2版)》——1.4 问与答
- 数据挖掘十大经典算法
- Tkinter经典写法