SwiftUI preview provider with binding variables SwiftUI preview provider with binding variables swift swift

SwiftUI preview provider with binding variables


Just create a local static var, mark it as @State and pass it as a Binding $

struct AddContainer_Previews: PreviewProvider {  @State static var isShowing = false  static var previews: some View {    AddContainer(isShowingAddContainer: $isShowing)  }}


Other way

    struct AddContainer_Previews: PreviewProvider {      static var previews: some View {        AddContainer(isShowingAddContainer: .constant(false))      }    }


If you want to watch the binding:

Both solutions above [the "static var" variant AND the "constant(.false)"-variant work for just seeing a preview that is static. But you cannot not see/watch the changes of the value intended by the button action, because you get only a static preview with this solutions.

If you want to really watch (in the life preview) this changing, you could easily implement a nested view within the PreviewProvider, to - let's say - simulate the binding over two places (in one preview).

import SwiftUIstruct BoolButtonView: View {    @Binding var boolValue : Bool    var body: some View {        VStack {            Text("The boolValue in BoolButtonView = \(boolValue.string)")                .multilineTextAlignment(.center)                .padding()            Button("Toggle me") {                boolValue.toggle()            }            .padding()        }    }}struct BoolButtonView_Previews: PreviewProvider {        // we show the simulated view, not the BoolButtonView itself    static var previews: some View {        OtherView()            .preferredColorScheme(.dark)    }        // nested OTHER VIEW providing the one value for binding makes the trick    struct OtherView : View {                @State var providedValue : Bool = false                var body: some View {            BoolButtonView(boolValue: $providedValue)        }    }}