Swift 5.2 將 KeyPaths 用作函數(shù)
本文轉(zhuǎn)載自微信公眾號(hào)「Swift社區(qū)」,作者Swift社區(qū)。轉(zhuǎn)載本文請(qǐng)聯(lián)系Swift社區(qū)公眾號(hào)。
Swift 5.2 的新功能之一:能夠?qū)?KeyPaths 用作函數(shù)。如果您只在閉包中返回某個(gè) KeyPath 的值,這將非常有用。
在 Swift 5.2 之前:
- struct Student {
- let id: Int
- let name: String
- let age: Int
- let grade: Double
- }
- func getStudentsName(from students: [Student]) -> [String] {
- return students.map { $0.name }
- }
此代碼使用 map(_ :) 通過將數(shù)組中的每個(gè)學(xué)生返回 $0.name 來將 Student 對(duì)象的數(shù)組轉(zhuǎn)換為學(xué)生名字 String 數(shù)組,這是我們常用的一種寫法。
在 Swift 5.2 中,可以寫成(需要 Xcode 11.4 beta 以上):
- func getStudentsName(from students: [Student]) -> [String] {
- return students.map(\.name)
- }
這樣的寫法看起來非常清晰,也很簡(jiǎn)便。和 map(_ :) 一樣 filter(_ :), reduce(_ :) 等函數(shù)也可以直接這樣寫,比如我們想獲取所有年齡大于21歲的學(xué)生的名字?jǐn)?shù)組。
- extension Student {
- var isTwentyOneOrOlder: Bool {
- return age >= 21
- }
- }
- func getStudentsName(from students: [Student]) -> [String] {
- return student.filter(\.isTwentyOneOrOlder)
- .map(\.name)
- }
寫成這樣并不是必須的,只是在某些情況能讓代碼看起來更簡(jiǎn)便,但是有時(shí)候則不然,所以可以根據(jù)需要選擇是否使用。