티스토리 뷰
_ = publisher.assign(to: \.value, on: object)
이런식으로 쓰던데.... \.value는 처음 보는 문법이었다.
\.은 무슨 의미일까?
https://docs.swift.org/swift-book/ReferenceManual/Expressions.html#grammar_key-path-expression
스위프트 문서에 보면 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를 받는게 아닐까 싶다.
이상 끗.
'macOS, iOS' 카테고리의 다른 글
[iOS] 네이버 지도 설치 시 "_OBJC_CLASS_$_네이버맵 요소"이런 에러가 뜰 때 (0) | 2019.12.06 |
---|---|
swift EOF까지 input 받아오기! (0) | 2019.12.06 |
@escaping , a.k.a. 탈출 클로저 (0) | 2019.12.05 |
아카이브 이후에 나오는 페이지 보는 법 (0) | 2019.11.30 |
textFieldDelegate로 리턴버튼이나 textField 바깥 영역 눌렀을 때 keyboard dismiss (0) | 2019.11.22 |