후로훠티 래퍼 #5
leeinae
started this conversation in
Show and tell
Replies: 1 comment
-
진짜 꼭 리펙한다 ㅜ 감사합니다 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Property Wrapper
정의?
Swift 5.1에 추가된 문법 중 하나.
냥. 이름 그대로 프로퍼티를 감싼다
사이에 분리된 레이어를 추가해준다.
⇒
struct
,enum
,class
를 사용해서 다른 프로퍼티를 정의할 때 필요한 로직을 재사용할 수 있도록 한다.기본 형태
가 필요함
wrappedValue는 프로퍼티 래퍼에서 꼭 필요한 값이다. 없으면 컴파일 에러.
해당 프로퍼티 래퍼의 의도는, number에 어떤 값을 넣어도 12보다 작은 값이 지정되는 구조체를 가지도록 함.
사용할 때는, @ ← 어노테이션을 붙여 표시한다. 이 표시를 통해서 컴파일러에게 해당 프로터피를 프로퍼티 래퍼가 관리하길 원한다고 말해주는 것임..
적용한 모습임. 선언했던 프로퍼티 래퍼를 어노테이션으로 표시하고, 해당 값들을 호출하면
didSet
,willSet
처럼 작동한다.컴파일러
프로퍼티 래퍼를 추가했을 때 컴파일러가 수행하는 세 가지 작업
getter, setter를 생성해 그 속성을 계산하게 한다.
wrapper type의 저장 프로퍼티를 가짐
It introduces a stored property whose type is the wrapper type. ~
저장 프로퍼티를 초기화한다.
💡 **A property wrapper adds a layer of separation between code that manages how a property is stored and the code that defines a property.**프로퍼티 래퍼를 사용하지 않고 구현한다면?
많은 부분에서 중복이 발생한다 ..
프로퍼티 래퍼의 존재 이유는 관리 코드를 하나로 묶어서 추상화해놓고, 재사용하는 것이라고 생각함.
아 물론.. 커스텀해서 사용할 수도 있음. 그런데 wrappedValue라는 것을 굳이 참조하지 않아도 되니까 해당 프로퍼티 래퍼를 사용하자..
didSet, willSet과의 차이
defer
라는 키워드를 이용하는 .. 방법도 있음 (?)초기값 설정이 필요하다면, initializer를 추가할 수 있음
Projected Value
또, wrapped Value 외에도 projected Value를 추가할 수 있음. 투영된 값이라고 해석하면 될까나 싶다?
해당 값은 wrappedValue를 기반으로 다른 값을 투영해 사용할 수 있다.
어떤 타입이든 가능하고, property wrapper type과 동일한 접근 제한 레벨을 가져야함~!
얘도 wrappedValue와 마찬가지로 projectedValue라는 네이밍을 사용해야함.
대표적인 사용 예는 해당 값을 통해 propertyWrapper가 저장되기 전에 값이 조정(adjust)되었는지 확인하는 용도로 사용할 수도 있다.
접근 방법
해당 값은 $기호를 통해 접근할 수 있다.
wrapperedValue
projectedValue
사용 예
예시로는 bool 타입을 들어서 말했지만, 다른 데이터 타입도 사용할 수 있다. (self, instance 타입 등)
진짜 어디에 쓰이고 있는가!!
UserDefaults
WWDC 19에서 나온 예시임
코드 중복 꼬라지 좀 봐주삼
getter / setter에 forKey 파라미터만 달라지고 있다. 이것을 프로퍼티 래퍼로 추상화해보면,
Auto Layout
뷰의 translatesAutoresizingMaskIntoConstraints가 false여야 코드로 뷰의 오토레이아웃을 설정할 수 있음. 이 속성을 늘 해주지 않기 위해서 PropertyWrapper로 감싼다.
SampleFile
디버깅이나 테스트에 필요한 파일들을 정의할 수 있음.. mock .. json 이런 것?
요약..
Beta Was this translation helpful? Give feedback.
All reactions