Swift 5.2的新功能之一:能夠?qū)eyPaths用作函數(shù)。如果您只在閉包中返回某個KeyPath的值,這將非常有用。

keyPaths as Functions
在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ù)組中的每個學(xué)生返回$0.name來將Student對象的數(shù)組轉(zhuǎn)換為學(xué)生名字String數(shù)組,這是我們常用的一種寫法。
在Swift 5.2中,可以寫成(需要Xcode 11.4 beta 以上):
func getStudentsName(from students: [Student]) -> [String] {
return students.map(\.name)
}
這樣的寫法看起來非常清晰,也很簡便。和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)
}
寫成這樣并不是必須的,只是在某些情況能讓代碼看起來更簡便,但是有時候則不然,所以可以根據(jù)需要選擇是否使用。
賞我一個贊吧~~~