블로그

keyPath의 함수기능

게시 2분

User 구조체를 정의하고 그 배열을 만들자

struct User { let email: String let isAdmin: Bool } let users = [User(email: "A", isAdmin: true), User(email: "B", isAdmin: false), User(email: "C", isAdmin: true), User(email: "D", isAdmin: false)]

그리고 map을 이용해서 email이나 isAdmin값을 가져오거나

filter를 사용하려면 클로저를 전달해야한다.

users.map{$0.email} users.map{$0.isAdmin} users.filter{$0.isAdmin}

하지만 keyPath를 함수처럼 사용해서 더 예쁘게 작성할 수 있다.

users.map(\.email) users.map(\.isAdmin) users.filter(\.isAdmin)

이는 keyPath를 이용했을 때 이와 완전히 동일하다

users.map{ $0[keyPath: \User.email] } users.map{ $0[keyPath: \User.isAdmin] } users.filter{ $0[keyPath: \User.isAdmin] }

이는 컴파일러가 keyPath를 함수와 같은 기능을 할 수 있도록 Swift 5.2 에서 도입되었다.

let f1: (User) -> String = \User.email users.map(f1) let f2: (User) -> String = \.email users.map(f2) let f3 = \User.email as (User) -> String users.map(f3) let f4 = \.email as (User) -> String users.map(f4)

Reference:

swift-evolution/proposals/0249-key-path-literal-function-expressions.md at main · apple/swift-evolution (github.com)

댓글

댓글을 남기면 닉네임(또는 GitHub 계정 정보)이 저장됩니다. 개인정보처리방침

GitHub