1 map函数
并不是swift标准库中为一个使用泛型的函数。
接受其他函数作为参数的函数有时被称为高阶函数。
map 的泛型版本定义为Array的扩展。
处理确定类型的函数定义为该类型的扩展。
优点:自动补全更完善 暧昧的命名更少 以及(通常)代码结构更清晰。
2 Filter 通用型函数
filter 函数接受一个函数作为参数;filter 函数的类型是Element-Bool --对于数组中的所有元素,此函数都会判定他是否应该被包含在结果中:
像map 一样,Swift标准库中的数据类型已经有定义好的filter函数。
3.Reduce
例如计算数据的和;
将变量a初始化为某个值,然后对输入数组的每一项进行遍历,最后以某种方式更新结果。为了定义一个可以体现所需类型的泛型函数,我们需要对两份信息进行抽象:赋给result变量的初始值,和用于在每一次循环中更新结果的函数。Reduce函数就匹配这种模式。
Reduce函数在Swift标准库助也已经提供了。
我们可以使用Reduce来表示所有的函数。这个事实说明了reduce能够通过通用的方法来体现一个相当常见的编程模式:遍历数组并计算结果。
tip:通过reduce 来定义一切似乎不是什么好主意。因不出意外的话你的代码最终火灾运行期间大量复制生成的数组,换句话说,它不得不反复分配内存,释放内存。
4.泛型和any 类型
any 类型 能代表任何类型的值。
any 类型和泛型都能用于定义接受两个不同类型参数的函数。
泛型可以用于定义灵活的函数,类型检查仍然由编译器负责;
而any类型则可以避开swift的类型系统(所以应该尽可能避免使用)