Swift 06.Closures
看了好些文章.由于自己也是刚开始学习swift,闭包还是不是很明白.暂时先放放.等看完后面的.加深感触后,在回头总结闭包的概念.
数组中常用的闭包函数
在Swift的数组中自带了一些比较好用的闭包函数,例如Map, Filter, Reduce。接下来就好好的看一下这些闭包,用起来还是比较爽的。
(1) Map(映射)
说到Map的用法和功能,不能不说的是如果你使用过ReactiveCocoa框架,那么对里边的Sequence中的Map的使用方式并不陌生。其实两者的使用方法和功能是极为相似的。如果你没使用过RAC中的Map,那也无关紧要,接下来我们先上段代码开看一下数组中的Map闭包函数。
通过上面的代码段以及运行结果,我们不难看出,map闭包函数的功能就是对数组中的每一项进行遍历,然后通过映射规则对数组中的每一项进行处理,最终的返回结果是处理后的数组(以一个新的数组形式出现)。当然,原来数组中的元素值是保持不变的,这就是map闭包函数的用法与功能。
(2) Filter (过滤器)
Filter的用法还是比较好理解的,Filter就是一个漏勺,就是用来过滤符合条件的数据的。在ReactiveCocoa中的Sequence也是有Filter的,用法还是来过滤Sequence中的数据的。而在数组中的Filter用来过滤数组中的数据,并且返回新的数组,新的数组中存放的就是符合条件的数据。Filter的用法如下实例,下方的实例就是一个身高的过滤,过滤掉身高小于173的人,返回大于等于173的身高数据。
(3)Reduce
在ReactiveCocoa中也是有Reduce这个概念的,ReactiveCocoa中使用Reduce来合并消减信号量。在swift的数组中使用Reduce闭包函数来合并items, 并且合并后的Value。下方的实例是一个Salary的数组,其中存放的是每个月的薪水。我们要使用Reduce闭包函数来计算总的薪水。下方是DEMO的截图:
定义闭包后,控制器强引用了闭包.此时如果闭包内涉及到了UI更新等操作,用到self.那么就会造成->闭包强引用控制器.从而形成循环引用问题. 解决办法和OC类似: weak var weakSelf = self . 在闭包内使用weakSelf 时,需要"!" 即weakSelf!
转载于:https://www.cnblogs.com/Atropos/p/5088248.html
Swift 06.Closures相关推荐
- Swift中文教程(七) 闭包
闭包(Closures)是独立的函数代码块,能在代码中传递及使用.Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似. 闭包可以在上下文的范围内捕获.存储任何被定义 ...
- vue 得到枚举个数_快速枚举
枚举是用户定义的数据类型,由一组相关的值组成.关键字枚举用于定义枚举数据类型. 枚举功能 swift中的枚举也类似于C和Objective C的结构. 它在一个类中声明,其值通过该类的实例访问. 初始 ...
- Swift之深入解析闭包Closures的使用和捕获变量的原理
一.Closures 简介 ① 什么是闭包? 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.Swift 中的闭包与 C 和 Objective-C 中的代码块(b ...
- Swift 中的Closures(闭包)详解
Swift 中的Closures(闭包)详解 在Swift没有发布之前,所有人使用OC语言编写Cocoa上的程序,而其中经常被人们讨论的其中之一 -- Block 一直备受大家的喜爱.在Swift中, ...
- 【Swift 60秒】51 - Closures as parameters
0x00 Lesson Because closures can be used just like strings and integers, you can pass them into func ...
- swift和swiftui_在swiftui中查看布局和演示
swift和swiftui 您一直在等待的完整SwiftUI 2文档 (The Complete SwiftUI 2 Documentation You've Been Waiting For) At ...
- swift 多线程GCD和延时调用
GCD 是一种非常方便的使用多线程的方式.通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程.在 "复杂必死" 的多线程编程中,保持简单就是避免错误的金科玉 ...
- Swift学习笔记-协议(Protocols)
1.0 翻译:geek5nan 校对:dabing1022 2.0 翻译:futantan 校对:小铁匠Linus 定稿:shanksyang 本页包含内容: 协议的语法(Protocol Synta ...
- Swift 中的 @autoclosure
由于种种原因,掘金等第三方平台博客不再保证能够同步更新,欢迎移步 GitHub:github.com/kingcos/Per-.谢谢! Date Notes Swift Xcode Source Co ...
最新文章
- 几种典型的内存溢出案例,都在这儿了!
- js基础--javascript基础概念之String 类型
- 子矩阵的最大累加和问题
- DVWA学习(三)Brute Force(暴力破解)
- DICOM:适用范围
- diy一个android手机版下载,原神个人自制版
- 使用web3j构建以太坊钱包
- BufferedWriterTest
- java 静态导入_Java中静态导入的使用
- ubuntu下vscode编写cgo程序
- android炫酷动画源码,QQ菜单、瀑布流、二维码源码
- IT公民:293个公司人压力和心理调查
- android 打印kernel log,Android native log输出为kernel log方法
- 【转】Ogre 1.7版本重大改进by 诡辩
- 苹果手机计算机怎样拉到桌面,20个你应该知道的iPhone 7实用小技巧
- 柠檬班unitest和数据驱动
- python怎么设置随机数种子_python实验随机种子的设置
- Python爬虫【如何爬取内容(html)和解析内容】
- Android学习网站(1)
- Python中inplace、subset参数的意义
热门文章
- 不小心点了计算机一键还原怎么操作,电脑一键还原在哪里?电脑怎样一键还原系统...
- java中常见英文单词_JAVA中常见的英文单词
- mysql tiqu mssql_mysql数据表如何导入MSSQL中
- python虚拟环境搭建mac_在MAC上安装Python虚拟环境
- c++ list遍历_List集合就这么简单「源码剖析」
- dialog能提交数据吗_硬盘坏了能恢复数据吗?实用硬盘修复软件
- 顺序表(线性表的顺序存储)---C语言版
- 软件共享文件服务器,服务器共享文件软件
- 本地建mysql数据库_mysql 安装及新建本地数据库遇到的问题
- java LineRecordReader类解析