Tech/Swift
Swift 5.2 Key Path Exressions as Functions
Ellie Kim
2020. 3. 4. 11:42
key path는 프로퍼티에 대한 read - only 접근을 제공합니다.
key path를 사용하는 방법은 \ 시작으로 베이스 타입을 쓰고 프로퍼티명을 작성합니다.
(Root) -> Value를 \Root.value로 사용할 수 있는 기능이다.
예를 들어서 User타입이 있고 안에는 4개의 프로퍼티가 정의되어 있다고 가정합시다.
struct User {
let name: String
let age: Int
let bestFriend: String?
var canVote: Bool {
age >= 18
}
}
우리는 구조체의 인스턴스를 생성하고 그것을 배열에 넣을 수 있습니다.
let eric = User(name: "Eric Effiong", age: 18, bestFriend: "Otis Milburn")
let maeve = User(name: "Maeve Wiley", age: 19, bestFriend: nil)
let otis = User(name: "Otis Milburn", age: 17, bestFriend: "Eric Effiong")
let users = [eric, maeve, otis]
배열에 모든 유저 이름을 얻고 싶다면, 아래와 같이 key path를 사용해 얻을 수 있습니다.
let userNames = users.map(\.name)
print(userNames)
이전에는 다음과 같이 이름을 직접 검색하기 위해 클로저를 작성해야 했습니다.
let oldUserNames = users.map { $0.name }
이 같은 접근 방식은 다른 곳에서도 사용가능합니다.
이전에 값을 받고 프로퍼티 중 하나를 전달한 것이면 모두 key path로 대신 사용할 숭 있습니다.
canVote 할 수 있는 사용자를 뽑으려면 아래와 같이 사용하면 됩니다.
let voters = users.filter(\.canVote)
그리고 이것은 다음을 가진 모든 사용자에게 가장 친한 친구를 반환합니다.
let bestFriends = users.compactMap(\.bestFriend)
이와 같이 key path를 사용해 프로퍼티 접근을 가능하도록 합니다.
https://www.hackingwithswift.com/articles/212/whats-new-in-swift-5-2