[Swift 문법] 키 경로

!·2022년 8월 10일
0

Swift 문법

목록 보기
19/27

키 경로

  • 프로퍼티는 값을 바로 꺼내오는 것이 아니라 프로퍼티의 위치를 참조할 수 있도록 할 수 있다. 즉, 키 경로를 저장해서 특정 타입이나 인스턴스의 특정 프로퍼티를 미리 지정해두고 사용할 수 있다.
  • 키 경로 타입은 AnyKeyPath 라는 클래스에서 파생된다.
  • 제일 많이 확장된 키 경로 타입은 WritableKeyPath<Root, Value>ReferenceWritableKeyPath<Root, Value> 가 존재한다.
  • 키 경로는 \. 로 표현한다.

    \타입이름.경로.경로.경로

class Person{
	var name: String
    
    init(name: String){
    	self.name = name
    }
}

struct Stuff{
	var name: String
    var onwer: Person
}

print(type(of:\Person.name)) // ReferencewritableKeyPath<Person, String>
print(type(of:\(Stuff.name)) // WritableKeyPath<Stuff, String>
  • 다음과 같이 미리 키 경로를 저장해둘 수도 있다.
  • \. 은 해당 타입을 의미한다.
let keyPath = \Stuff.owner
let nameKeyPath = keyPath.appending(path: \.name)

키 경로 서브스크립트

class Person{
	var name: String
    
    init(name: String){
    	self.name = name
    }
}

struct Stuff{
	var name: String
    var onwer: Person
}

let yagom = Person(name: "yagom")
let hana = Person(name: "hana")
let macbook = Stuff(name: "MacBook Pro", owner: yagom)
var iMac = Stuff(name: "iMac", owner: yagom)
let iPhone = Stuff(name: "iPhone", owner : hana)

let stuffNameKeyPath = \Stuff.name
let ownerKeyPath = \Stuff.owner

let ownerNameKeyPath = onwerKeyPath.appending(path: \.name)

print(macbook[keyPath: stuffNameKeyPath])
print(iMac[keyPath: stuffNameKeyPath])
print(iPhone[keyPath: stuffNameKeyPath])

print(macbook[keyPath: ownerNameKeyPath])
print(iMac[keyPath: ownerNameKeyPath])
print(iPhone[keyPath: ownerNameKeyPath])
profile
개발자 지망생

0개의 댓글