Swift06: 函数

162 阅读2分钟

函数

函数是一等公民,可以是被当作变量,参数,返回值。函数式编程的思想就是一切皆函数。

内置高阶函数:

filter:filter函数的作用就是接受一个闭包作为筛选规则,自动遍历集合的每一个元素,保留符合闭包规则的元素,生成一个新的集合

struct Package{
    var name:String
    var number:String
    var price:Float
    var address:String
}

let packages = [
    Package(name: "Swift高阶函数编程", number: 1, price: 80.0, address: "中关村"),
    Package(name: "Swift面向协议编程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基础", number: 3, price: 35.0, address: "798"),
    Package(name: "Swift进阶", number: 4, price: 50.0, address: "望京soho")
]


let package80s = packages.filter { (package) -> Bool in
                    return package.price == 80
                }
print(package80s)

package80s = packages.filter {$0.price == 80}

print(package80s)

map: Swift中的map函数的作用就是接受一个闭包作为规则,自动遍历集合的每一个元素,使用闭包的规则去处理这些元素,生成一个结构相同的集合

//将每一个元素的name作为新数组的元素
let let packageNames = packages.map {$0.name} 

flatmap:Swift中的flatMap函数的作用就是接受一个闭包作为规则,自动遍历集合的每一个元素,使用闭包的规则去处理这些元素,将处理结果直接放入到一个新的集合里面,可以出现数组降维,并且会自动过滤nil(自动解包),如果是不包含nil元素的一维数组的和map的作用效果是一样的,所以推荐使用flatMap

let packages = [
    Package(name: "Swift高阶函数编程", number: 1, price: 80.0, address: "中关村"),
    Package(name: "Swift面向协议编程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基础", number: 3, price: 35.0, address: "798"),
    nil,
    Package(name: "Swift进阶", number: 4, price: 80.0, address: "望京soho")
]

let packageNames = packages.flatMap { (package) -> String? in
    return package?.name
}

reduce:Swift中的reduce函数的作用就是接受一个初始化值,并且接受一个闭包作为规则,自动遍历集合的每一个元素,使用闭包的规则去处理这些元素,合并处理结果

let packages = [
    Package(name: "Swift高阶函数编程", number: 1, price: 80.0, address: "中关村"),
    Package(name: "Swift面向协议编程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基础", number: 3, price: 35.0, address: "798"),
    Package(name: "Swift进阶", number: 4, price: 50.0, address: "望京soho")
]

let reduceName = packages.reduce("") {$0 + $1.name}
//reduceName = "Swift高阶函数编程Swift面向协议编程Swift基础Swift进阶"