반응형
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/
반응형
'개발 창고 > iOS' 카테고리의 다른 글
[SwiftUI] Formatter를 이용하여 Date 타입 처리하는 방법 (0) | 2023.08.03 |
---|---|
[SwiftUI] TextField에 Text를 설정하는 방법 (0) | 2023.08.02 |
[SwiftUI] View에서 Toggle을 사용하는 방법 (0) | 2023.08.01 |
[SwiftUI] 삼항연산자 사용하는 방법 (0) | 2023.08.01 |
[SwiftUI] ListView에 ListStyle 적용하는 방법 (0) | 2023.07.31 |