SwiftUI:如何在预览期间更改顶级ContentView @State?

时间:2020-01-31 21:29:11

标签: swift swiftui

我有一个顶层MacOS SwiftUI内容视图,在该视图中,我通常将[Frame]数组的@State初始化为一个空数组[]。但是,当我预览它时,我想在其中添加一个示例框架。

这是最少的代码:(Frame是我自己的结构,Frame.sampleFrame是供预览使用的静态框架)。

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()
    }
}

,如果我预览的话,这就是如何在FrameSummaryView中创建恒定的1元素数组[Frame.sampleFrame]:

struct FrameSummaryView_Previews: PreviewProvider {
    static var previews: some View {
        FrameSummaryView(frames: .constant([Frame.sampleFrame]))
    }
}

在预览模式下,如何使顶级ContentView使用.constant([Frame.sampleFrame])[Frame]数组?

1 个答案:

答案 0 :(得分:1)

这是可行的方法

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])
    }
}