티스토리 뷰

_ = publisher.assign(to: \.value, on: object)

 

이런식으로 쓰던데.... \.value는 처음 보는 문법이었다. 

 

\.은 무슨 의미일까?

 

https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#grammar_key-path-expression

 

Expressions — The Swift Programming Language (Swift 5.1)

Expressions In Swift, there are four kinds of expressions: prefix expressions, binary expressions, primary expressions, and postfix expressions. Evaluating an expression returns a value, causes a side effect, or both. Prefix and binary expressions let you

docs.swift.org

 

스위프트 문서에 보면 key-path-expression 이라는게 있다. 

 

 

아까 assign함수에 to: \.value를 넣을때 keyPath: ReferenceWritableKeyPath<Root, String>이었는데, 바로 그 타입이다!!

 

WritableKeyPath 타입은, 공식 다큐먼트에 "A key path that supports reading from and writing to the resulting value" 라고 설명되어 있다. 

 

KVC라는걸 들어봤는가? 나는 처음들어봤는데, 'Key-Value Coding'의 약자라고 한다. 객체의 값을 직접 가져오거나 수정하지 않고,  Key 또는 KeyPath를 이용해서 간접적으로 데이터를 가져오거나 수정하는 방법을 말한다고 한다. 

 

 

가끔 Swift3(매우옛날) 코드를 보다 보면 #keyPath() 이런 문법이 보이는데, 얘는 deprecated 되었으니 걱정 말고 무시하면 된다. 

 

 

 

 

이렇게 Person이랑 Stuff의 struct를 선언해주고, 

 

 

yejin이랑 macbook 객체를 만들었다. 

 

 

\Person.name을 찍으면, WritableKeyPath<Person, String> 타입임을 알 수 있다. 여기까지는 납득 가능. 

 

 

 

macbook[keyPath: \Stuff.name]을 하면, macbook이 나온다. 

 

???? 그냥 macbook.name을 하면 간단할것을... 왜 저러지...????

 

=> 간접적으로 가져오고 싶기 때문이라고 한다....

 

 

이렇게 keyPath 뒤에다가 append도 할 수 있다. 

 

macbook.owner.name이 하기 싫어서 돌고 돌아 macbook[keyPath: \Stuff.owner.name]으로 했다고 대충 이해하면 될 것 같다. 

 

 

 

 

KVC 는 Core Data 나 바인딩, 스크립팅 등을 지원하기 위한 필수 기술 중 하나이기 때문에 반드시 알고 있어야 하는 중요한 개념이라고 한다. 하지만 일상에서? 일반 코드에서는 당연히 이렇게 쓸 필요가 없는 것 같다. 이런게 있구나~ 하고 넘어가면 되지 않을까 싶다. 

 

 

다시 예제로 돌아가서, 

 

_ = publisher.assign(to: \.value, on: object)

 

 

 

assign함수는 keyPath를 인자로 받고, 뒤에 object에 assign을 시키는구나....

 

아마 그냥 assign을 못하는 무언가의 이유가 있어서 keyPath를 받는게 아닐까 싶다. 

 

이상 끗. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함