前言
\\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\