본문 바로가기

SwiftUI의 PreviewProvider와 Binding

기술적인 이야기/애플 플랫폼 개발 2020. 12. 14.
반응형

SwiftUI는 개발 단계에서 라이브 프리뷰를 통해 코드의 모습을 즉석에서 확인할 수 있습니다. 그런데 @Binding 처럼 외부의 값을 대여해 주어야 하는 경우 샘플 프리뷰를 작성할 때 약간의 곤란함이 있습니다.

728x90

예를 들어 아래의 예제가 있습니다.

import SwiftUI

struct SomeView: View {
    @Binding var name: String

    var body: some View {
        Text("Hello \(name)")
    }
}

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

위에서 SomeView_Previews 구조체에서 SomeView 인스턴스를 생성하면서 넘기는 name 파리미터의 값이 문제입니다. 위의 코드를 빌드하면 아래와 같은 오류가 발생하기 때문입니다.

Cannot convert value of type 'String' to expected argument type 'Binding<String>'

다행히도 이 문제의 해결은 매우 쉽습니다. Binding 타입에서 제공하는 특수한 정적 메서드인 .constant를 활용할 수 있습니다. 따라서 위의 SomeView_Previews의 내용을 아래와 같이 수정할 수 있습니다.

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

.constant를 이용하면 @State 등을 이용하지 않고도 샘플 프리뷰로 사용할 고정 값을 이렇게 넘길 수 있습니다.

728x90
반응형

댓글