티스토리 뷰

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

https://github.com/apple/swift-evolution/blob/master/proposals/0249-key-path-literal-function-expressions.md

 

'Tech > Swift' 카테고리의 다른 글

스위프트 lazy 프로퍼티  (0) 2020.03.31
스위프트 typealias에 대해서  (0) 2020.03.31
문자열 결합  (0) 2020.01.05
Int to String 그리고 String to Int  (0) 2020.01.05
map, flatMap, compactMap 차이점  (0) 2019.12.03
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함