前言

\\

Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性。这也使得我们学习掌握这门语言变得相对来说更加困难。不过一切都是值得的,Swift 相比 Objective-C,写出来的程序更安全、更简洁,最终能够提高我们的工作效率和质量。

\\

Swift 相关的学习资料已经很多,我想从另外一个角度来介绍它的一些特性,我把这个角度叫做「烧脑体操」。什么意思呢?就是我们专门挑一些比较费脑子的语言细节来学习。通过「烧脑」地思考,来达到对 Swift 语言的更加深入的理解。

\\

这是本体操的第三节,练习前请做好准备运动,保持头脑清醒。

\\

准备运动:基础知识

\\

在上一节里面,我们其实已经涉及到了高阶函数了。在 Wikipedia 中,是这么定义高阶函数(higher-order function)的,如果一个函数:

\\

  • 接受一个或多个函数当作参数\\t
  • 把一个函数当作返回值\

那么这个函数就被称作高阶函数。下面是一个简单的排序的例子,在这个例子中,传进去的参数就是一个函数:

\\

\let numbers = [1, 4, 2, 3]\let res = numbers.sort {\    $0 \u0026lt; $1\}\

\\

Trailing Closure Syntax

\\

上面的代码看着不像是函数作为参数存在,这是因为 Swift 的 Trailing Closure 特性。Swift 允许当函数的最后一个参数是闭包的时候,以紧跟 { } 的形式,将最后一个闭包的内容附加在函数后面。

\\

所以,以下两行代码是等价的:

\\

\// 正常写法,函数是作为 sort 的参数\arr.sort({ $0 \u0026lt; $1 })\\// Trailing Closure 写法,更简洁明了\arr.sort { $0 \u0026lt; $1 } \

\\

常见用法示例

\\

高阶函数在 Swift 语言中有大量的使用场景,我们先来看一看常见的用法:

\\

遍历

\\

我们可以用 map 方法来对数组元素进行某种规则的转换,例如:

\\

\let arr = [1, 2, 4]\// arr = [1, 2, 4]\\let brr = arr.map {\    \"No.\" + String($0)\}\// brr = [\"No.1\

Swift 烧脑体操(三) - 高阶函数相关推荐

  1. Swift 烧脑体操(二) - 函数的参数

    前言 \\ Swift 其实比 Objective-C 复杂很多,相对于出生于上世纪 80 年代的 Objective-C 来说,Swift 融入了大量新特性.这也使得我们学习掌握这门语言变得相对来说 ...

  2. 廖雪峰讲python高阶函数求导公式_廖雪峰的学习笔记(三)高阶函数

    1.所谓的"高阶函数":把函数对象作为参数的函数. 2.示例: map()函数: 我们先看map.map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数 ...

  3. Python 基础之匿名函数 迭代器和高阶函数

    一.匿名函数 lambda表达式 用一句话来表达只有返回值的函数,叫匿名函数特点:简洁方便语法:lambda 参数: 返回值 1.不带有参数的lambda表达式 def func():     ret ...

  4. Python高阶函数原理分析及其应用

    三 高阶函数, 闭包和装饰器 所谓高阶函数就是把函数做为参数传入的一类函数. 另外, 返回函数的函数也属于高阶函数. 3.1 函数做为参数传入另外一个函数 3.1.1 高阶函数引入 Python中函数 ...

  5. Swift的高阶函数

    Swift的高阶函数 swift常用高阶函数 1. map 2. flatMap 3. filter 4. reduce swift常用高阶函数 swift中比较常用的高阶函数有:map.flatMa ...

  6. [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)

    简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...

  7. JavaScript 面向对象编程(三) —— 函数进阶 / 严格模式 / 高阶函数 / 闭包 / 浅拷贝和深拷贝

    本篇为 JavaScript 进阶 ES6 系列笔记第三篇,将陆续更新后续内容.参考:JavaScript 进阶面向对象 ES6 :ECMAScript 6 入门 系列笔记: JavaScript 面 ...

  8. Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  9. python高阶函数(三分钟读懂)

    python高阶函数(三分钟读懂) 函数式编程 Python中,函数是一等对象 一等对象:具有特点 ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回 ...

最新文章

  1. 比较分析与数组相关的sizeof和strlen
  2. .NET重构—单元测试重构
  3. caffe中mnist数据集的运行
  4. boost::gursoy_atun_layout用法的测试程序
  5. 【Gunicorn】gunicorn配置文件详解
  6. Npgsql 6.0.2 发布,赶紧升级!!!
  7. Tesseract Ocr文字识别
  8. SVN Cleanup失败解决方法
  9. Linux 实例如何开启 MySQL 慢查询功能
  10. xu2w显示屏软件下载_LED显示屏控制软件(LED BEST)
  11. android连接airprint打印机,苹果让无线打印更加便捷,安卓已羡慕
  12. codeforces——962
  13. python尼姆游戏_python实现聪明的尼姆游戏(人机对战)
  14. 简体和繁体之间的转换
  15. css3实现div hover阴影效果
  16. R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型、使用ggcoxzph函数可视化进行Schoenfeld残差图检验模型是否满足等比例风险
  17. 广州优漫动游公司:高级UI/UE交互设计就业班学什么?
  18. BP神经网络隐层节点的个数设置方法
  19. Seurat的normalization和scaling
  20. java特种兵_《Java特种兵(上册)》PDF 下载

热门文章

  1. VTK:Video之MPEG2
  2. VTK:Utilities之Animation
  3. Qt Creator选择模式
  4. OpenGL 点光源的多遍阴影贴图
  5. OpenGL顶点阵列对象
  6. C++全局变量和局部变量有什么区别
  7. QT的QString类的使用
  8. c++原型模式prototype
  9. intraweb php,使用 IntraWeb (40) - 自定义 Session 数据
  10. rocketmq安装,内存配置,各种命令说明,windows下安装,控制台工具