Swift UI @ 바인딩 초기화
스위프트를 가지고 놀고 있었습니다.UI를 사용하여 다음과 같은 개념을 이해했습니다.BindableObjects
등 (적어도 그러길 바랍니다).
바보 같은 문제에 부딪혀서 답을 찾을 수 없는 것 같습니다.어떻게 초기화합니까?@Binding
변수?
다음 코드가 있습니다.
struct LoggedInView : View {
@Binding var dismissView: Bool
var body: some View {
VStack {
Text("Hello World")
}
}
}
미리보기 코드에서 유형의 매개 변수를 전달하고 싶습니다.Binding<Bool>
:
#if DEBUG
struct LoggedInView_Previews : PreviewProvider {
static var previews: some View {
LoggedInView(dismissView: **Binding<Bool>**)
}
}
#endif
초기화하려면 어떻게 해야 합니까? 시도:
Binding<Bool>.init(false)
Binding<Bool>(false)
또는 심지어:
@Binding var dismissView: Bool = false
하지만 아무 것도...무슨 생각이 있습니까?
사용할 때LoggedInView
앱에서 다음과 같은 바인딩을 제공해야 합니다.@State
이전의 관점이나 관점에서@EnvironmentObject
.
특별한 경우에는PreviewProvider
사용할 수 있는 고정된 값이 필요한 경우.constant(false)
예.
#if DEBUG
struct LoggedInView_Previews : PreviewProvider {
static var previews: some View {
LoggedInView(dismissView: .constant(false))
}
}
#endif
사용.Binding.constant(false)
정적 미리 보기에만 사용할 수 있습니다.라이브 프리뷰를 시작하고 싶다면,constant
실제 사례와 동일한 방식으로 동작하지 않습니다. 사용자의 작업에 의해 업데이트되지 않습니다.저는 개인적으로 라이브 미리보기를 많이 사용합니다. 고립된 뷰로 재생할 수 있기 때문입니다.
다음은 미리 보기를 위해 수행하는 작업입니다.Binding
:
import SwiftUI
struct SomeView: View {
@Binding var code: String
var body: some View {
// some views modifying code binding
}
}
struct SomeView_Previews: PreviewProvider {
static var previews: some View {
PreviewWrapper()
}
struct PreviewWrapper: View {
@State(initialValue: "") var code: String
var body: some View {
SomeView(code: $code)
}
}
}
- 단일 뷰에 속하는 단순 속성이 필요한 경우 @State를 사용해야 합니다.
- 여러 뷰(예: 2-3 뷰)에 속할 수 있는 복잡한 속성이 필요한 경우 @ObjectBinding을 사용해야 합니다.
- 마지막으로 모든 주변 뷰를 사용해야 하는 속성이 필요한 경우 @EnvironmentObject를 사용해야 합니다.세부 정보 소스
이러한 경우에도 바인딩 변수를 초기화하려면 다음을 사용할 수 있습니다.
var binding: Binding = .constant(false)
미리 보기에서 사용해야 합니다..constant(Bool(false))
:
#if DEBUG
struct LoggedInView_Previews : PreviewProvider {
static var previews: some View {
LoggedInView(dismissView: .constant(Bool(false))
}
}
#endif
viewModel과 같은 개체가 있으면 .constant()를 사용할 수도 있습니다.
struct View_Previews: PreviewProvider {
static var previews: some View {
View(vm:.constant(ViewModel(text: "Sample Text")))
}
}
사용자 정의 컨트롤을 작업 중이며 사용자 정의 컨트롤의 다른 구성을 보고 싶습니다.@NeverwinterMoon에서 제공하는 구현을 확장하여 뷰의 독립적인 인스턴스를 여러 개 생성했습니다.
struct SomeView: View {
@Binding var value: Int
var body: some View {
// some views modifying code binding
}
}
struct SomeView_Previews: PreviewProvider {
static var previews: some View {
VStack {
// The same view but with different configurations
// Configuration #1
PreviewWrapper() { value in
SomeView(value: value)
.background(Color.blue)
}
// Configuration #2
PreviewWrapper(initialValue: 2) { value in
SomeView(value: value)
.padding()
}
}
}
struct PreviewWrapper<Content: View>: View {
@State var value: Int
private let content: (Binding<Int>) -> Content
init(
initialValue: Int = 0,
@ViewBuilder content: @escaping (Binding<Int>) -> Content
) {
self.value = initialValue
self.content = content
}
var body: some View {
content($value)
}
}
}
언급URL : https://stackoverflow.com/questions/56685964/swiftui-binding-initialize
'programing' 카테고리의 다른 글
MySQL JSON_MERGE / REPLACE.값을 실제로 업데이트하고 병합하지 않는 방법 (0) | 2023.08.13 |
---|---|
쿼리 중에 MySQL 서버에 대한 연결 끊김' 오류가 자주 발생하는 이유(시간 초과 발생, 쿼리 전 ping) (0) | 2023.08.13 |
jQuery를 사용하여 Yes(예) 또는 No(아니오) 확인 상자 (0) | 2023.08.13 |
자바스크립트에서 window.navigate 또는 document.location을 사용해야 합니까? (0) | 2023.08.13 |
@Init의 Angular 2에서 입력 속성이 정의되지 않았습니다. (0) | 2023.08.13 |