본문 바로가기

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 등을 이용하지 않고도 샘플 프리뷰로 사용할 고정 값을 이렇게 넘길 수 있습니다.

 

SwiftUI에서 바인딩 매개변수를 일반 타입의 값으로 넘기기 - Seorenn

SwiftUI에서 바인딩 매개변수를 일반 타입의 값으로 넘기기 Swift // 2024년 07월 16일 작성 SwiftUI로 뷰를 만들다 해당 뷰를 테스트 해야 할 일이 있을 수 있다. 예를 들자면 프리뷰(SwiftUI Preview)용 코드

seorenn.github.io

 

728x90
반응형

댓글