Moon Work

[Swift] \. 는 무엇인가 (KeyPath 정리) 본문

Swift

[Swift] \. 는 무엇인가 (KeyPath 정리)

moonkey 2023. 3. 23. 20:19

시작하며

SwiftUI tutorial을 보던 중 \. 라는 표현이 등장 했다. 처음 보는 표현이라 당황하였지만 언제는 친절한 스위프트 튜토리얼이었나 생각하며 구글링을 통해 정리해 보려 한다.

 

KeyPath

  • syntax: \BaseType.PropertyName
  • Base타입은 타입 추론에 의해 추론할 수 있는 경우 생략해서 \.propertyName과 같이 사용한다.
  • KeyPath는 값에 대한 참조가 아닌 프로퍼티에 대한 참조이다. 말 그대로 어떤 타입의값에 대한 path를 표현한다.
  • 변수는 KeyPath와 달리 값에 대한 참조를 하기 때문에 변수를 사용하면 값에 전근할 수 있다.
  • KeyPath의 표현식은 \ (백슬래시) 로 시작한다.

예시

struct Person {
 var name: String
}

let austin = Person(name: "austin")
//let name = austin[keyPath: \Person.name] 타입 추론 전
let name = austin[keyPath: \.name]

 

5가지 KeyPath

  • AnyKeyPath : 타입이 지워진 KeyPath
  • PartialKeyPath : 부분적으로 타입이 지워진 KeyPath
  • KeyPath<Source, Target> : Read-only
    • 프로퍼티가 let으로 선언된 경우
  • WritableKeyPath<Source, Target> :
    • value-type 인스턴스에 사용가능
    • 변경 가능한 모든 프로퍼티에 대한 read-write access 제공
    • 프로퍼티가 var로 선언된 경우
  • ReferenceWritableKeyPath<Source, Target> :
    • 클래스의 인스턴스에 사용 가능
    • 변경 가능한 모든 프로퍼티에 대한 read-write access 제공
    • 프로퍼티가 var로 선언된 경우

 

요약

  •  . 을 통해 객체의 value에 접근 했다면 \BaseType.을 통해 프로퍼티 자체에 접근해서 key에 대한 값을 가져 올 수 있게 한다.
  • \BaseType. 에서 타입 추론이 가능한 경우 \. 와 같이 사용한다.
  • 객체 내부에 let과 var를 사용 여부에 따라 읽기 가능과 읽기-쓰기 가능으로 구분된다.

 

 

 

ref

https://techblog.woowahan.com/2715/

 

알아두면 쓸모 있는 Swift의 기능들 | 우아한형제들 기술블로그

{{item.name}} Swift는 C와 Objective-C와의 연동은 뛰어나지만 JS, Python 과 같은 dynamic 언어들과는 상대적으로 떨어집니다. 그 이유들로 추가되고 있는 기능들이 있습니다. KeyPath, dynamicMemberLookup 등 Swift의

techblog.woowahan.com

https://zeddios.tistory.com/1218

 

Key-Value Coding(KVC) / KeyPath in Swift

안녕하세요 :) Zedd입니다. 오늘은 KVC에 대해서 공부해보겠습니다. # KVC - Key-Value Coding 의 약자 - 객체의 값을 직접 가져오지않고, Key 또는 KeyPath 를 이용해서 간접적으로 데이터를 가져오거나 수정

zeddios.tistory.com

https://80000coding.oopy.io/2c9f09c6-8162-4336-b8fe-a2d2d721f5ae

 

(Swift) 이름은 모르지만 어쨌든 "\." 에 대한 포스팅 (feat. KeyPath)

SwiftUI 튜토리얼을 따라하다가 아래와 같은 코드를 보게되었다.

80000coding.oopy.io