Swift高階函數(shù)

最近了解Swift函數(shù)式編程,函數(shù)式編程的思想就是一切皆函數(shù),函數(shù)作為一等公民,可以是被當作變量,參數(shù),返回值。個人理解函數(shù)式編程,就是高階函數(shù)編程的應(yīng)用。所以要熟練掌握基礎(chǔ)的高階函數(shù)是必須的filter,map,reduce,flatmap就是必備的高階函數(shù)。這里的$n表示的是閉包的第n + 1個參數(shù),這是swift的基礎(chǔ),不多做記錄

filter

Swift中的filter函數(shù)的作用就是接受一個閉包作為篩選規(guī)則,自動遍歷集合的每一個元素,保留符合閉包規(guī)則的元素,生成一個新的集合

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

let packages = [
    Package(name: "Swift高階函數(shù)編程", number: 1, price: 80.0, address: "中關(guān)村"),
    Package(name: "Swift面向協(xié)議編程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基礎(chǔ)", 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函數(shù)的作用就是接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,生成一個結(jié)構(gòu)相同的集合

//將每一個元素的name作為新數(shù)組的元素
let let packageNames = packages.map {$0.name} 
flatMap

Swift中的flatMap函數(shù)的作用就是接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,將處理結(jié)果直接放入到一個新的集合里面,可以出現(xiàn)數(shù)組降維,并且會自動過濾nil(自動解包),如果是不包含nil元素的一維數(shù)組的和map的作用效果是一樣的,所以推薦使用flatMap

let packages = [
    Package(name: "Swift高階函數(shù)編程", number: 1, price: 80.0, address: "中關(guān)村"),
    Package(name: "Swift面向協(xié)議編程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基礎(chǔ)", 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函數(shù)的作用就是接受一個初始化值,并且接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,合并處理結(jié)果
Returns the result of combining the elements of the sequence using the given closure(重點在于combining)

let packages = [
    Package(name: "Swift高階函數(shù)編程", number: 1, price: 80.0, address: "中關(guān)村"),
    Package(name: "Swift面向協(xié)議編程", number: 2, price: 88.0, address: "西二旗"),
    Package(name: "Swift基礎(chǔ)", 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高階函數(shù)編程Swift面向協(xié)議編程Swift基礎(chǔ)Swift進階"
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容