これまでにSwiftUIをいじって、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)
}
}
}
あなたの場合、Binding変数を初期化したい場合は、以下を使用できます。
var binding: Binding = .constant(false)