티스토리 뷰

Swift

[Swift]Property Wrapper

real_water 2022. 5. 3. 02:27

공식문서를 보고 번역+이해한 내용을 덧붙인 글입니다😊😊

 

🤔 Propery Wrapper??

A property wrapper adds a layer of separation between code that manages how a property is stored and the code that defines a property

 

음...  프로퍼티가 저장되는 방식을 관리하는 코드와 정의하는 코드를 분리해준다  이정도로 직역하면 될 거 같다.

 

 

보통은 변수를 정의할 때

이렇게 정의하고 끝났겠지만

get/set을 정의해 줌으로써 number가 항상 12이하의 값을 가질 수 있도록 해준다.

아래 코드처럼!!

(property Wrapper를 정의하는데 wrappedValue는 반드시 필요한 변수이다)

 

 

 

정의를 다시 읽어보자면 

프퍼티티에 값이 어떻게 저장되고 return해줄지를 get/set을 이용해서 manage하는 부분과

var number = 0 처럼 프로퍼티를 define하는 부분으로 나누어 주는 것

굳이 나누자면 이런느낌?

 

그리고 핵심은

이 manage하는 code를(Property Wrapper) 프로퍼티 자체에 붙여 줄 수 있다는 것!!

그리고 재사용할 수 있다는 것!!

 

즉, Property Wrapper란,

프로퍼티 정의와 구현/로직(?)을 나누어 작성해주고, 이 로직을 프로퍼티 자체에 직접 연결해 주는 것 이다.

 

Property Wrapper 사용하기

정의된 Property Wrapper는 맨 앞에 @어노테이션을 붙여주고 래퍼의 이름을 적어주면 된다.

@TwelverOrLess라는 래퍼가 붙은 프로퍼티는 아무리 12 이상의 숫자를 넣어도 12이하의 값만 return해준다.

 

Wrapped Property 초기화

 

위 예제는 height과 weight에 직접 초기값을 줄 수 없다.

 

프로퍼티 래퍼 TwelveOrLess에서 정의한 number=0 이외의 값으로는 초기화 시킬 수 없는데, 

값을 임의로 바꾸려고 하면 이런 에러를 보게 될 것이다.

 

 

프로퍼티 래퍼를 정의했을 때와 다른 초기값을 주기 위해 사용해야하는게 initalizer!!

 

 

SmallNumber라는 3개의 initializer를 갖는 프로퍼티 래퍼를 정의해줬다.

 

 

1.init()

 

heigth와 width에 래퍼를 달아주고, 초기 값을 안줬을 때는 Init()함수를 호출해 각 값을 0으로 초기화 해준다.

 

2.init(wrappedValue: )

프로퍼티의 값을 1로 초기화 해줬을 때는 init(wrappedValue: )가 호출되고,

1을 wrappedValue의 인자로 받는다.

 

3.init(wrappedValue:  , maximum: )

maximum 역시 초기값을 지정해 줄 수 있다.

property wrapper뒤에 각 인자의 값을 전달해 주면 된다.

 

 

[참고사이트]

https://docs.swift.org/swift-book/LanguageGuide/Properties.html

 

Properties — The Swift Programming Language (Swift 5.6)

Properties Properties associate values with a particular class, structure, or enumeration. Stored properties store constant and variable values as part of an instance, whereas computed properties calculate (rather than store) a value. Computed properties a

docs.swift.org

 

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