高阶函数(Swift):
高阶函数是迅速进行功能编程的概念。
听起来很复杂,但相反却很简单。
定义:可以接受函数或闭包作为参数或返回一个函数/闭包的函数称为高阶函数。
有许多高阶函数,我们将研究其中最广泛使用的一些函数:map,flatMap,filter,reduce和sorted。
返回一个数组,其中包含将给定闭包映射到序列的元素上的结果。
进口基金会
让数组= [1,2,3,4,5]
// map使用一个参数关闭,并将更改逐一应用于数组的每个元素。
让mapArray = = array.map({num in
数* 100
})
打印(mappedArray)
//使用尾随闭包来简化地图
让mapArray = array.map {$ 0 + 5}
打印(mapArray)
宣言:
func flatMap (_转换:(Self.Element)抛出-> SegmentOfResult)重新抛出-> [SegmentOfResult.Element] whereSegmentOfResult:Sequence
FlatMap非常喜欢Map,但是顾名思义,它可以使结果变平,因此,如果您有array(嵌套数组)的数组,并且使用了flatmap,那么它将提供合并了嵌套数组所有元素的级联数组。
进口基金会
让数组= [[“ Dhoni”,“ Ganguly”],[“ Kohli”,“ Rahul”],[“ Yuvraj”,“ Rohit”,“ Bhumrah”]]
让flatmap1 = array.flatMap {$ 0}
打印(flatmap1)
让arr = [“ 1”,“ 2”,“ 3”,“ 10”,“ Johar”,“ Mon”,“ 12”]
让mapResult = arr.map {Int($ 0)}
打印(mapResult)
让flatMapResult = arr.flatMap {Int($ 0)}
打印(flatMapResult)
这样我们可以看到map和flatmap之间的区别,map返回结果无需处理,但是flatmap是智能的
它不仅解开结果,而且从结果中删除nil。
当转换为每个元素生成序列或集合时,请使用此方法接收单级集合。
返回使用给定的闭包组合序列元素的结果。
宣言:
func reduce(_ initialResult : Result, _ nextPartialResult : (Result,Self.Element) throws -> Result) rethrows -> Result
进口基金会
让数组= [10,2,3,1,2,3,2]
让reduceResult = array.reduce(0,{x,y in
x + y
})
打印(reducedResult)
让reduceResult2 = array.reduce(1,{
$ 0 * $ 1
})
打印(reduceedResult2)
输出:
23
720
返回一个数组,该数组按顺序包含满足给定谓词的序列中的元素。
宣言:
func filter(_ isIncluded :(Self.Element)抛出-> Bool)重新抛出-> [Self.Element]
进口基金会
让strArr = [“ Abhishek”,“ Ganga”,“ Disha”,“ Choi”,“ Taj Mahal”]
//我们希望元素的长度小于5
让filterArr = strArr.filter({
name.count <= 5
})
打印(filteredArr)
输出: [“ Ganga”,“ Disha”,“ Choi”]
返回序列中的元素,使用给定谓词作为元素之间的比较进行排序。
进口基金会
枚举HTTPResponse {
情况还可以
大小写错误(整数)
}
让响应:[HTTPResponse] = [.error(500)、. ok,.ok,.error(404)、. error(402)]
让sortedResponses = response.sorted {
切换($ 0,$ 1){
//按代码排序错误
大小写让(.error(codeA),. error(codeB)):
返回代码A <代码B
//所有成功都是等价的,因此没有一个比其他任何成功更重要。
大小写(.ok,.ok):
返回假
//成功之前订购错误
case(.error,.ok):返回true
case(.ok,.error):返回false
}
}
打印(sortedResponses)
让学生:Set = [“ Kofi”,“ Abena”,“ Peter”,“ Kweku”,“ Akosua”,“ Aakash”]
让sortedStudents = students.sorted {
$ 0 <$ 1
}
打印(sortedStudents)
输出:
[HTTPResponse.error(402),HTTPResponse.error(404),HTTPResponse.error(500),HTTPResponse.ok,HTTPResponse.ok]
[“ Aakash”,“ Abena”,“ Akosua”,“ Kofi”,“ Kweku”,“ Peter”]