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' 카테고리의 다른 글
| 비동기 함수 여러개 호출 후 completionHandler 호출 (0) | 2023.08.21 |
|---|---|
| 프로퍼티 감시자가 호출되는 경우 [Swift] (0) | 2023.08.20 |