Swift高階函數介紹

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

filter

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

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函數的作用就是接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,生成一個結構相同的集合

//將每一個元素的name作為新數組的元素

let let packageNames = packages.map {$0.name} 

flatMap

Swift中的flatMap函數的作用就是接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,將處理結果直接放入到一個新的集合里面,可以出現數組降維,并且會自動過濾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函數的作用就是接受一個初始化值,并且接受一個閉包作為規(guī)則,自動遍歷集合的每一個元素,使用閉包的規(guī)則去處理這些元素,合并處理結果
Returns the result of combining the elements of the sequence using the given closure(重點在于combining)

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進階"
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容