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的截图:

4.闭包的循环引用. 
尽量不在闭包之外的地方使用self.
定义闭包后,控制器强引用了闭包.此时如果闭包内涉及到了UI更新等操作,用到self.那么就会造成->闭包强引用控制器.从而形成循环引用问题. 解决办法和OC类似: weak var weakSelf = self .  在闭包内使用weakSelf 时,需要"!" 即weakSelf!  

转载于:https://www.cnblogs.com/Atropos/p/5088248.html

Swift 06.Closures相关推荐

  1. Swift中文教程(七) 闭包

    闭包(Closures)是独立的函数代码块,能在代码中传递及使用.Swift中的闭包与C和Objective-C中的代码块及其它编程语言中的匿名函数相似. 闭包可以在上下文的范围内捕获.存储任何被定义 ...

  2. vue 得到枚举个数_快速枚举

    枚举是用户定义的数据类型,由一组相关的值组成.关键字枚举用于定义枚举数据类型. 枚举功能 swift中的枚举也类似于C和Objective C的结构. 它在一个类中声明,其值通过该类的实例访问. 初始 ...

  3. Swift之深入解析闭包Closures的使用和捕获变量的原理

    一.Closures 简介 ① 什么是闭包? 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.Swift 中的闭包与 C 和 Objective-C 中的代码块(b ...

  4. Swift 中的Closures(闭包)详解

    Swift 中的Closures(闭包)详解 在Swift没有发布之前,所有人使用OC语言编写Cocoa上的程序,而其中经常被人们讨论的其中之一 -- Block 一直备受大家的喜爱.在Swift中, ...

  5. 【Swift 60秒】51 - Closures as parameters

    0x00 Lesson Because closures can be used just like strings and integers, you can pass them into func ...

  6. swift和swiftui_在swiftui中查看布局和演示

    swift和swiftui 您一直在等待的完整SwiftUI 2文档 (The Complete SwiftUI 2 Documentation You've Been Waiting For) At ...

  7. swift 多线程GCD和延时调用

    GCD 是一种非常方便的使用多线程的方式.通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程.在 "复杂必死" 的多线程编程中,保持简单就是避免错误的金科玉 ...

  8. Swift学习笔记-协议(Protocols)

    1.0 翻译:geek5nan 校对:dabing1022 2.0 翻译:futantan 校对:小铁匠Linus 定稿:shanksyang 本页包含内容: 协议的语法(Protocol Synta ...

  9. Swift 中的 @autoclosure

    由于种种原因,掘金等第三方平台博客不再保证能够同步更新,欢迎移步 GitHub:github.com/kingcos/Per-.谢谢! Date Notes Swift Xcode Source Co ...

最新文章

  1. 几种典型的内存溢出案例,都在这儿了!
  2. js基础--javascript基础概念之String 类型
  3. 子矩阵的最大累加和问题
  4. DVWA学习(三)Brute Force(暴力破解)
  5. DICOM:适用范围
  6. diy一个android手机版下载,原神个人自制版
  7. 使用web3j构建以太坊钱包
  8. BufferedWriterTest
  9. java 静态导入_Java中静态导入的使用
  10. ubuntu下vscode编写cgo程序
  11. android炫酷动画源码,QQ菜单、瀑布流、二维码源码
  12. IT公民:293个公司人压力和心理调查
  13. android 打印kernel log,Android native log输出为kernel log方法
  14. 【转】Ogre 1.7版本重大改进by 诡辩
  15. 苹果手机计算机怎样拉到桌面,20个你应该知道的iPhone 7实用小技巧
  16. 柠檬班unitest和数据驱动
  17. python怎么设置随机数种子_python实验随机种子的设置
  18. Python爬虫【如何爬取内容(html)和解析内容】
  19. Android学习网站(1)
  20. Python中inplace、subset参数的意义

热门文章

  1. 不小心点了计算机一键还原怎么操作,电脑一键还原在哪里?电脑怎样一键还原系统...
  2. java中常见英文单词_JAVA中常见的英文单词
  3. mysql tiqu mssql_mysql数据表如何导入MSSQL中
  4. python虚拟环境搭建mac_在MAC上安装Python虚拟环境
  5. c++ list遍历_List集合就这么简单「源码剖析」
  6. dialog能提交数据吗_硬盘坏了能恢复数据吗?实用硬盘修复软件
  7. 顺序表(线性表的顺序存储)---C语言版
  8. 软件共享文件服务器,服务器共享文件软件
  9. 本地建mysql数据库_mysql 安装及新建本地数据库遇到的问题
  10. java LineRecordReader类解析