Swift 5.2 將 KeyPaths 用作函數
本文轉載自微信公眾號「Swift社區」,作者Swift社區。轉載本文請聯系Swift社區公眾號。
Swift 5.2 的新功能之一:能夠將 KeyPaths 用作函數。如果您只在閉包中返回某個 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(_ :) 通過將數組中的每個學生返回 $0.name 來將 Student 對象的數組轉換為學生名字 String 數組,這是我們常用的一種寫法。
在 Swift 5.2 中,可以寫成(需要 Xcode 11.4 beta 以上):
- func getStudentsName(from students: [Student]) -> [String] {
- return students.map(\.name)
- }
這樣的寫法看起來非常清晰,也很簡便。和 map(_ :) 一樣 filter(_ :), reduce(_ :) 等函數也可以直接這樣寫,比如我們想獲取所有年齡大于21歲的學生的名字數組。
- extension Student {
- var isTwentyOneOrOlder: Bool {
- return age >= 21
- }
- }
- func getStudentsName(from students: [Student]) -> [String] {
- return student.filter(\.isTwentyOneOrOlder)
- .map(\.name)
- }
寫成這樣并不是必須的,只是在某些情況能讓代碼看起來更簡便,但是有時候則不然,所以可以根據需要選擇是否使用。