개발 창고/iOS

[SwiftUI] Preview에서 @Binding 변수 전달하는 방법

로이제로 2023. 8. 2. 22:00
반응형

How to use views with "@Binding" in Preview

SwiftUI를 @Binding을 사용하는 경우가 있고, 이 때 미리보기에서 아래와 같은 오류를 접하곤 합니다.

바인딩 오류 내용

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

 

이는 Binding 변수인 value에 일반 문자열 값이 들어왔기 때문입니다.

 

다른 View에서 이 TestView를 이용 할 경우에는 아래와 같이 @State를 이용하면 문제가 없지만,

struct UseView: View {
    @State private var input = "Binding 테스트입력입니다."
    
    var body: some View {
        TestView(value:$input)
    }
}

// View 미리보기
struct UseView_Previews: PreviewProvider {
    static var previews: some View {
        UseView()
    }
}

미리보기 화면

 

Prepview에서는 아래와 같이 사용하면 또 다른 오류를 발생 시킵니다.

바인딩 오류 화면

Instance member '$input' cannot be used on type 'TestView_Previews'

 

해결방법

사족이 좀 길었는데, 이때 사용가능한게 .constant입니다. 이는 실제 View에서 사용하면 State의 변경을 감지하지 못하지만, Preview에서는 Binding처럼 사용가능하게 됩니다.

struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView(value:.constant("Binding 테스트입력입니다."))
    }
}

 

전체 테스트 소스

import SwiftUI

// View 페이지
struct TestView: View {
    @Binding var value:String
    
    var body: some View {
        Text(value)
    }
}

// 사용 View
struct UseView: View {
    @State private var input = "Binding 테스트입력입니다."
    
    var body: some View {
        TestView(value:$input)
    }
}

// View 미리보기
struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView(value:.constant("Binding 테스트입력입니다."))
    }
}

테스트 소스 결과

 

※ 이 글은 워드프레스에 작성한 글과 동일한 작성자의 동일한 글입니다.

https://royfactory.net/2023/07/12/swiftui-binded-view-preview/

 

[SwiftUI] How to use views with “@Binding” in Preview - ROY FACTORY

How do I view View with @Binding in preview in SwiftUI? In this article, you will learn how to preview with @Binding.

royfactory.net

 

반응형