티스토리 뷰
공식문서를 보고 번역+이해한 내용을 덧붙인 글입니다😊😊
🤔 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
'Swift' 카테고리의 다른 글
[Swift]Optional이란? 옵셔널 정리하기 (0) | 2022.08.09 |
---|---|
MVVM in SwiftUI (0) | 2022.03.30 |
[swift]Closure란? + Closure축약 과정 (0) | 2021.11.25 |
[swift]어노테이션 (1) | 2021.10.26 |
[xcode]fail to prepare for communication with playground for an unknown reason (0) | 2021.10.26 |
- Total
- Today
- Yesterday
- ios
- provisioning key
- 파이썬
- 애플 인증서
- 백준 1065번 swift
- mvvm in swiftui
- xcuserdata
- palera1n
- readme ignore파일 포함한 repository
- closure
- main branch
- 백준
- 백준알고리즘
- xcsharedata
- Xcode
- New Group
- 알고리즘
- 장고
- New Group Without Folder
- django
- 백준 4673 swift
- 애플 인증
- property wrapper
- 이분탐색
- Widget
- ios mvvm
- 클로저
- sileo
- 프로퍼티 래퍼
- SWiFT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |