Swift 5.2 將KeyPaths用作函數(shù)

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ù)需要選擇是否使用。

賞我一個贊吧~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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