Swift Property Wrapper

Jee.e (황지희)·2022년 5월 11일
0
post-custom-banner

Property Wrapper

  • Swift 5.1에서 추가된 기능이다.
  • 프로퍼티가 저장되는 방식을 관리하는 코드프로퍼티를 정의하는 코드 사이에 분리 계층을 추가한다.
  • 중복되는 값을 하나로 정의할 수 있다.
  • 프로퍼티 자체에 연결할 수 있어, 보일러 플레이트 코드와 코드의 재사용성을 높여준다.
  • 구조체, 열거형 혹은 클래스를 사용해 구현을 한다.
  • 해당 타입 앞에 @Property Wrapper 를 붙여 컴파일러에게 이 타입은 특별하다. 라고 알려준다.
  • 쉽게 말해 프로퍼티가 해야할 행동을 정의하는 타입 이다.

✅ 사용 예시
문자를 대문자로 변경하려면,

struct Name {
    private var _firstName = ""
    private var _lastName = ""
    
    var firstName: String {
        get { self._firstName.uppercased() }
        set { self._firstName = newValue }
    }
    
    var lastName: String {
        get { self._lastName.uppercased() }
        set { self._lastName = newValue }
    }
    
    init(firstName: String, lastName: String) {
        self.firstName = firstName
        self.lastName = lastName
    }
}

var users = Name(firstName: "Jee", lastName: "Hwang")
users.lastName = "Kim"
print(users.lastName) // print "KIM"

위와 같이 선언 후 출력하였다.
근데, propertyWrapper 를 적용해보면

// propertyWrapper로 행동를 정의
@propertyWrapper
struct Uppercased {
    var wrappedValue: String {
        didSet { wrappedValue = wrappedValue.uppercased() }
    }
    init(wrappedValue: String) {
        self.wrappedValue = wrappedValue.uppercased()
    }
}

// 사용할 구조체 선언
struct User {
    @Uppercased var firstName: String
    @Uppercased var lastName: String
}

var user = User(firstName: "Jee", lastName: "Hwang")
user.lastName = "Kim" // 값 변경
print(user.lastName) // print "KIM"

propertyWrapper 를 정의 후, 사용할 프로퍼티 앞에 propertyWrapper 를 적어주기만 하면 된다.

코드에 중복도 사라지고 간결해지며, 유지보수가 용이해지는 느낌이다!




참고문서
https://zeddios.tistory.com/1221

profile
교훈없는 경험은 없다고 생각하는 2년차 iOS 개발자입니다.
post-custom-banner

0개의 댓글