| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 闭包学习记录-iOS开发 -> 正文阅读 |
|
[移动开发]闭包学习记录-iOS开发 |
专业的解释:闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。 形式:Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些编程语言中的匿名函数(Lambdas)相似。 故名思义,闭合地包起来可以完成一件事儿就是个闭包。闭包这玩意儿,只是给它取了个名字而已,全局函数其实也是个闭包。还有闭包就是自包含的函数代码块,可以在代码中被传递和使用。比如,嵌套函数,函数作为参数的情况。
作用:用来解决什么问题呢?闭包解决了函数内变量暴露给函数外访问的问题。可以缓存上级作用域,那么就使得函数外部打破了“函数作用域”的束缚。 值捕获,闭包可以在上下文中捕获常量或变量的引用。即使常量和变量的原作用域已经不存在,闭包仍然可以在闭包函数体内引用和修改这些值。👇这种情况就是值捕获
接下来,我们来对👆🌰进行值捕获的解释👇
形式补充:函数和闭包都是引用类型,将函数或闭包赋值给一个常量还是变量,实际上是将函数或闭包的引用设置为常量或变量的值,而并非闭包内容本身。意味着如果将闭包赋值给了两个不同的常量或变量,两个值都会指向同一个闭包。继续👆例子🌰
语法:函数和返回值类型都写在大括号内 闭包的函数体部分由关键字 in 引入
语法优化: 1.省略参数和返回值类型,可根据上下文推断出
2.行表达式闭包可以通过省略 return 关键字
3.参数名称缩写,$0 和 $1 表示闭包中第一个和第二个参数
4.运算符方法【?这个暂时先保留,知识结构补充ing】 与 sorted(by:) 方法的参数需要的函数类型相符合。因此,你可以简单地传递一个大于号,Swift 可以自动推断找到系统自带的那个字符串函数的实现:reversedNames = names.sorted(by: >) 5.尾随闭包: 将闭包表达式写在函数圆括号之后,作为函数的最后一个参数调用。用于闭包长度非常长的情况
若闭包表达式是函数的唯一参数,可以把 () 省略掉
应用场景:1.逃逸闭包:当一个闭包作为一个函数的参数,且闭包在函数返回之后才被执行。定义函数时,在参数名之前标注 @escaping指明这个闭包允许“逃逸”出这个函数。 🌰不想复制粘贴,具体例子移步官方文档?逃逸闭包 - SwiftGG 相信看完文档中的🌰对这个概念已经有了大概的理解,我来浅浅总结一下。很多启动异步操作的函数接受一个闭包参数作为 completion handler。这类函数会在异步操作开始之后立刻返回但不被调用,直到异步操作结束后才会被调用。在这种情况下,闭包需要“逃逸”出函数,因为闭包需要在函数返回之后被调用。 补充:逃逸闭包需要显示引用self 项目中的🌰:实现 确认是否安装外部鱼眼镜头的 Alert弹窗
补充: 当闭包作为函数的参数,该闭包也有参数时 1.声明函数时,不考虑闭包的具体内容,{ }里面是函数体,函数体内有对闭包进行传参调用。 2.函数调用时,作为尾随闭包,{ }里面是尾随闭包
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 4:21:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |