【问题标题】:SwiftUI: How to change top-level ContentView @State during preview?SwiftUI:如何在预览期间更改顶级 ContentView @State?
【发布时间】:2020-01-31 21:29:11
【问题描述】:

我有一个顶级 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] 数组?

【问题讨论】:

    标签: swift swiftui


    【解决方案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])
        }
    }
    

    【讨论】:

    • 谢谢。在将“String”类型小幅编辑为“Frame”后工作。 “State”非常有用……我不习惯那种语法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多