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
property 를 정의해야한다.속성이 저장되는 방식과 속성을 정의하는 코드를 분리하는 레이어를 추가한다.
먼가 재사용 나왔다
12 이하의 숫자만 저장하는, number 를 래핑한 구조체
@propertyWrapper
struct TwelveOrLess {
private var number = 0
var wrappedValue: Int {
get { return number }
set { number = min(newValue, 12) }
}
}
@propertyWrapper
struct SmallNumber {
private var maximum: Int
private var number: Int
var wrappedValue: Int {
get { return number }
set { number = min(newValue, maximum) }
}
init() {
maximum = 12
number = 0
}
init(wrappedValue: Int) {
maximum = 12
number = min(wrappedValue, maximum)
}
init(wrappedValue: Int, maximum: Int) {
self.maximum = maximum
number = min(wrappedValue, maximum)
}
}