MINRYUL
류링류링
MINRYUL
전체 방문자
오늘
어제
  • 분류 전체보기
    • Swift
      • 학습
    • iOS
      • Toy-Project
      • 학습
      • Metal
    • CS
    • TIL

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • RxNimble
  • opaque type
  • Existential any
  • Existential type
  • static framework
  • tuist
  • Custom Calendar
  • CollectionView Cell
  • WWDC
  • RxSwift
  • Clean Architecture
  • AttributeText
  • Swift
  • ios
  • TableView Cell
  • dynamic frameworkm
  • Protocol
  • some
  • urlsession
  • demangle
  • collectionView
  • RxCocoa
  • ViewStore
  • configuration_bulid_dir
  • WWDC 2024
  • BDD
  • Any
  • METAL
  • RxTest
  • TDD

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
MINRYUL
Swift/학습

KeyPath

Swift/학습

KeyPath

2023. 6. 13. 17:15

Swift 4에서 도입된 KeyPath는 속성이나 서브스크립트에 대한 참조를 나타내는 안전한 방법이다. KeyPath를 사용하면 속성의 이름을 직접 사용하는 대신에 키 경로를 통해 속성에 접근할 수 있다. 이를 통해 컴파일러가 키 경로의 유효성을 검사하고 타입 안정성을 보장할 수 있다.

KeyPath는 세 가지 주요 유형으로 분류된다.

  • KeyPath to a Property (속성에 대한 KeyPath): 이 유형의 KeyPath는 특정 타입의 속성에 대한 참조. 예를 들어, KeyPath<Person, String>는 Person 타입의 String 속성에 대한 KeyPath이다.
struct Person {
    var name: String
    var age: Int
}

let person = Person(name: "John", age: 30)

// 속성에 대한 KeyPath
let nameKeyPath = \\Person.name
let ageKeyPath = \\Person.age

let name = person[keyPath: nameKeyPath]
let age = person[keyPath: ageKeyPath]
print("Name: \\(name), Age: \\(age)") // Output: Name: John, Age: 30
  • KeyPath to a Subscript (서브스크립트에 대한 KeyPath): 이 유형의 KeyPath는 특정 타입의 서브스크립트에 대한 참조. 서브스크립트의 인덱스를 사용하여 요소에 접근할 수 있다. 예를 들어, KeyPath<Array<Int>, Int>는 Int 요소에 대한 Array<Int>의 KeyPath이다.
// 서브스크립트에 대한 KeyPath
let array = [1, 2, 3, 4, 5]
let indexKeyPath = \\Array<Int>.[2] // 2번 인덱스에 대한 KeyPath
let element = array[keyPath: indexKeyPath]
print("Element at index 2: \\(element)") // Output: Element at index 2: 3

KeyPath를 사용하여 속성, 서브스크립트에 대한 참조를 생성할 수 있다. 이를 통해 속성에 대한 정보를 추출하거나, 동적으로 속성에 접근하거나, 속성 간의 연산을 수행할 수 있다. 또한, KeyPath를 사용하여 함수에 속성 또는 서브스크립트를 전달할 수도 있다.

 

KeyPath prefix operator

\. : key-path-expression (\ <TYPE NAME> . <path>)

 Type의 경우 추론이 가능해서, key-path-expression을 사용하는 경우 추론이 가능한 상황이면 \.<path> 로 사용이 가능하다.

 

 정리하면, 프로퍼티는 값에 대한 참조. 따라서 프로퍼티를 사용하면 값(value)에 접근 가능하다. 하지만, keyPath는 값에 대한 참조가 아닌 프로퍼티에 대한 참조이다. 즉, 객체 내부의 값에 직접적으로 참조하는 것이 아닌 값의 이름(프로퍼티)를 참조하는 것이다.

여러가지 KeyPath에 대한 클래스가 있으니 상황에 맞게 사용하면 된다.

 

AnyKeyPath : 타입이 지워진 KeyPath

PartialKeyPath : 부분적으로 타입이 지워진 KeyPath

KeyPath : 읽기 전용

WritableKeyPath : 읽기 및 쓰기 가능

ReferenceWritableKeyPath : 클래스의 인스턴스에 사용 가능. 변경 가능한 모든 프로퍼티에 대한 read & write access 제공.

 

 

Documentation

 

docs.swift.org

'Swift > 학습' 카테고리의 다른 글

2022 WWDC Design protocol interfaces in Swift  (0) 2023.05.03
Existential any in Swift explained with code examples(번역)  (0) 2023.04.06
Swift Opaque Types(번역)  (0) 2023.03.28
enum으로 특정 단위를 명확하게 표현하기  (0) 2022.09.25
2022 WWDC Embrace Swift Generics  (1) 2022.07.04
    'Swift/학습' 카테고리의 다른 글
    • 2022 WWDC Design protocol interfaces in Swift
    • Existential any in Swift explained with code examples(번역)
    • Swift Opaque Types(번역)
    • enum으로 특정 단위를 명확하게 표현하기
    MINRYUL
    MINRYUL
    열심히 살자

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.