Reputation: 844
I have a top-level MacOS SwiftUI content view where I normally initialize @State for my array of [Frame] to an empty array []. But when I preview it, I would like to have a sample Frame in it.
Here's minimal code: (Frame is my own struct, Frame.sampleFrame is a static frame for preview use).
struct ContentView: View {
@State var frames: [Frame] = []
var body: some View {
VStack {
FrameSummaryView(frames: self.$frames)
Text("Placeholder")
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
and here's how I create a constant 1-element array [Frame.sampleFrame] in my FrameSummaryView, if I preview that:
struct FrameSummaryView_Previews: PreviewProvider {
static var previews: some View {
FrameSummaryView(frames: .constant([Frame.sampleFrame]))
}
}
How can I make it so my top level ContentView uses the .constant([Frame.sampleFrame]) [Frame] array when in preview mode?
Upvotes: 2
Views: 629
Reputation: 257493
Here is possible approach
struct ContentView: View {
@State var frames: [Frame]
init(_ frames: [Frame] = []) {
_frames = State<[Frame]>(initialValue: frames)
}
var body: some View {
VStack {
FrameSummaryView(frames: self.$frames)
Text("Placeholder")
}.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView([Frame.sampleFrame])
}
}
Upvotes: 1