本文转载自微信公众号《Swift社区》,作者:Swift社区。转载本文请联系Swift社区公众号。Swift5.2的新特性之一:将KeyPaths作为函数使用的能力。如果您只是在闭包中返回某个KeyPath的值,这将很有用。在Swift5.2之前:structStudent{letid:Intletname:Stringletage:Intletgrade:Double}funcgetStudentsName(fromstudents:[Student])->[String]{returnsstudents.map{$0.name}}此代码通过将Each数组中的student返回$0.name,将Student对象数组转换为学生姓名String数组,这是一种常见的写法。在Swift5.2中,可以这样写(需要Xcode11.4beta或以上版本):funcgetStudentsName(fromstudents:[Student])->[String]{returnsstudents.map(\.name)}这种写法看起来非常清晰简单。和map(_:)一样,filter(_:),reduce(_:)等函数也可以直接写成这样,比如我们要获取年龄大于21的所有学生姓名数组.没有必要这样写extensionStudent{varisTwentyOneOrOlder:Bool{returnage>=21}}funcgetStudentsName(fromstudents:[Student])->[String]{returnstudent.filter(\.isTwentyOneOrOlder).map(\.name)}this,只是在某些情况下,它可以让代码看起来更简单,但有时却并非如此,所以你可以根据自己的需要选择是否使用它。
