Exclude Swiftui Previews from Code Coverage

SwiftUI pass data to subview

var subName: String

struct SubView: View {
var subName: String
// ...
}

In the above example you don't really have a state. When the subName property in the parent view changes, the whole SubView is redrawn and thus provided with a new value for the subName property. It's basically a constant (try changing it to let, you'll have the same result).

@State var subName: String

struct SubView: View {
@State var subName: String
// ...
}

Here you do have a @State property which is initialised once (the first time the SubView is created) and remains the same even when a view is redrawn. Whenever you change the subName variable in the parent view, in the SubView it will stay the same (it may be modified from within the SubView but will not change the parent's variable).

@Binding var subName: String

struct SubView: View {
@Binding var subName: String
// ...
}

If you have a @Binding property you can directly access the parent's @State variable. Whenever it's changed in the parent it's changed in the SubView (and the other way around) - that's why it's called binding.

Why can I not pass variables to a SwiftUI view in preview?

It cannot detect return type automatically in this case, so here are possible fixes

static var previews: some View {

// setup test dice data (d4, d5, d6)
let testDice: [Die] = [Die(sides: 4), Die(sides: 5), Die()]
return DiceListView(dice: testDice)
}

or

static var previews: some View {

// setup test dice data (d4, d5, d6)
DiceListView(dice: [Die(sides: 4), Die(sides: 5), Die()])
}


Related Topics



Leave a reply



Submit