SwiftUI Property Wrapper 팁 모음

2022년 11월 2일 수정

이 글은 SwiftUISwiftUI Property Wrappers와 관련된 몇 가지 팁을 정리한다.

Custom Initializer

struct SomeView: View {
    @Binding var name: String

    var body: some View { ... }
}

이런 뷰에서 생성자를 커스터마이징 하고 싶다면 아래와 같은 식으로 구현할 수 있다.

struct SomeView: View {
    @Binding var name: String

    init(name: Binding<String>) {
        self._name = name
    }

    var body: some View { ... }
}

밑줄이 붙은 이름은 @Binding 이 자동으로 생성하는 프로퍼티인 것 같은데 명확한 것은 실제 구현을 봐야 알 수 있을 것 같다. 어쨌든 이런 식으로 기본 생성자를 마음대로 커스터마이징 할 수 있다.

Custom Initializer (Xcode 14)

Xcode 14부터는 State는 일반적인 방식으로 초기화가 가능해지는 것 같다. (🌏출처)

struct SomeView: View {
    @State private var value: Int

    init(value: Int) {
        self.value = value
    }
}

다른 형태도 가능한지는 테스트가 필요할 것 같다.

미리보기에 테스트용 값 넘기기

SwiftUI용 뷰 구현 시 미리보기용 코드에서 @Binding 프로퍼티에 테스트용 값을 넘길 때는 Binding 에 정의된 constant() 를 이용할 수 있다. 예를 들어 SomeView 뷰에서 name 프로퍼티가 @Binding 으로 선언되어 있어서 뷰를 생성할 때 이 값을 임의 테스트 값으로 넘기려면 아래처럼 할 수 있다.

struct SomeView_Previews: PreviewProvider {
    static var previews: some View {
        SomeView(name: .constant("James"))
    }
}