A property wrapper adds a layer of separation between code that manages how a property is stored and the code that defines a 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)
    }
}