swift 随笔:闭包及数组三大高阶函数
2017-03-15 本文已影响51人
Theendisthebegi
- 简介
Swift一大特性便是使用简洁的头等函数
闭包语法代替了复杂的blocks语法。希望我们在Swift中不再需要像fuckingblocksyntax中所描述的语法。(头等函数-即可将函数当作参数传递给其他的函数,或从其他的函数里返回出值,并且可以将他们设定为变量,或者将他们存储在数据结构中)。 闭包是自包含的blocks,它能在代码中传递和使用。Blocks/闭包(同一概念的不同命名)在Cocoa和Cocoa Touch中广泛使用,是iOS 框架的核心。 闭包是极其强大的语言特性,它能够使我们编写程序的时候更快,更容易,更少出错。 Swift的标准数组支持三个高阶函数:map,filter和reduce。Objective-C的NSArray没有实现这些方法 - map函数
map用于将每个数组元素通过某个方法进行转换。
用一个例子来说明。今天我办生日聚会,要迎接很多人,并且为每个人都准备了一句欢迎词。我们要怎么做呢?首先我们将迎接的人放进一个数组名叫guestList,然后用一个名叫greetPeople的函数为每个人生成欢迎词:
func greetPeople(person: String) -> String
{
return "Hello, (person)!"
}
let guestList = ["Chris", "Jill", "Tim"]
let fullGreetings = guestList.map(greetPeople)
print(fullGreetings)
打印结果自然是:
["Hello, Chris!", "Hello, Jill!", "Hello, Tim!"]
也当然也可以这样写
let guestList = ["Chris", "Jill", "Tim"]
let fullGreetings = guestList.map{"Hello, ($0)!"}
print(fullGreetings) ($0 $1 分别表示第一第二个参数,以此类推)
- Filter函数
顾名思义,是用来筛选的函数。 filter用于选择数组元素中满足某种条件的元素。
let numbers = [2,8,6,3,7,15,89,453,23,1,0,53];
筛选出大于10的数字
numbers.filter({$0 >10})
就这么简单
- Reduce函数
reduce方法把数组元素组合计算为一个值,并不是单指求和,而是自定义一个公式。
let numbers = [2,8,6,3,7,15,89,453,23,1,15,53];
求和
numbers.reduce(0, {$0 + $1})
这里的0是指初始数字。 也可以简写成
numbers.reduce(0, + )
同理,求积
numbers.reduce(1,*)