// SequenceTestVC.swift
// SwiftErrorHandlingAndGenerics
//
// Created by Hunter on 23/01/2017.
// Copyright © 2017 Hunter. All rights reserved.
//
import UIKit
class SequenceTestVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// MARK: - 闭包
func square(a:Float) -> Float {
return a * a
}
func cube(a:Float) -> Float {
return a * a * a
}
// 普通做法:
func averageSumOfSquares(a:Float,b:Float) -> Float {
return (square(a: a) + square(a: b)) / 2.0
}
func averageSumOfCubes(a:Float,b:Float) -> Float {
return (cube(a: a) + cube(a: b)) / 2.0
}
// 函数作为参数做法:
@discardableResult
func averageSumOfFunction(a: Float, b: Float,f:((Float) ->Float))-> Float {
return (f(a) + f(b)) / 2
}
// 实现
print(averageSumOfFunction(a: 4, b: 4, f: square))
print(averageSumOfFunction(a: 4, b: 4, f: cube))
print(averageSumOfFunction(a: 3, b: 3, f: {(x: Float) -> Float in return x * x}))
// 忽略指定参数名,使用默认参数名$0(如果函数接收多个参数,使用$K作为第K-1个参数,如$0,$1,$2......)
print(averageSumOfFunction(a: 3, b: 3, f: { $0 * $0 * $0}))
print("-----------------------------------------------------------------")
// MARK: - Array
/*
Swift的标准数组支持三个高阶函数:map,filter和reduce。Objective-C的NSArray没有实现这些方法
*/
// MARK: map
/*
map: 即转换
转换原数组元素并由此得到一个新数组
*/
let moneyArr: [Int] = [1,22,33,100,1000,1000000000,100000000000000]
print(moneyArr)
let stringArr: [String] = moneyArr.map({"\($0)?"})
print(stringArr)
print(moneyArr.map({ (money) in "\(money)?" }))
// MARK: Filter
/*
filter: 即赛选
赛选数组中符合条件的元素
*/
print(moneyArr.filter { (money) -> Bool in return 20 < money && money < 10000 })
print(moneyArr.filter({20 < $0 && $0 < 10000}))
// MARK: Reduce
/*
reduce: 把数组元素组合计算为一个值
*/
/*
reduce(initial: U, combine: (U, T) -> U) -> U
接收两个参数,一个为类型U的初始值,另一个为把类型为U的元素和类型为T的元素组合成一个类型为U的值的函数。
最终结果整个数组就变成了一个类型为U的值
*/
print(moneyArr.reduce(0, {$0 + $1}))
print(moneyArr.reduce(0, +))
// 遍历
let name = "uraimo"
(1...4).forEach{print("Happy Birthday " + (($0 == 3) ? "dear \(name)":""))}
}
}
Swift高阶函数(map,filter和reduce)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Map 使用 map 来遍历集合并对集合中每一个元素进行同样的操作。 Filter filter函数会遍历一个集合...
- Swift是一门面向协议的语言,且对函数式编程提供了很好的支持,其中Swift提供了map,filter,redu...
- 一、关于闭包 Swift函数是一等公民,Swift一大特性就是使用简洁的语言去替代复杂的函数操作。所谓闭包就是自包...
- 之前学习 Python 的时候,觉得还不错,然后发现 Swift 里面也有。 1、map 函数 -- 对数组中的...
- Swift是一门面向协议的语言,在使用Swift时我们已经充分享受到了面向协议编程带给我们的便利,但是Swift相...