首页 > 解决方案 > SwiftUI 上的 previewProvider 无法加载

问题描述

今天我想知道是否有可能在 SwiftUI 上使用PreviewProvider它来设计一个视图,当你有模型时很困难,因为你需要“初始化”每个模型和属性才能看到 UI 模拟器。前任

    struct SimpleView: View {
    
    @State private var number : Int 
    
    
    var body: some View {
        ScrollView{
            VStack{
                Text(String(number))
            }
        }
    }
}


struct SimpleView_Previews: PreviewProvider {
    static var previews: some View {
        SimpleView(Int: 5)
    }
}

UI 预览效果很好!

但是,如果我需要使用具有 40-70 个属性的自定义对象怎么办... :(

有没有一开始没有“硬代码”的工作方法?

太感谢了

标签: iosswiftswiftui

解决方案


一种方法是创建一个mockViewModel类属性,该属性返回具有可用于预览的固定值的实例。

在这个例子中,支持模型对象是一个 Core Data 托管对象。

在正常使用中,您调用ProjectDetailViewModel(project:)初始化程序。

对于预览,您可以使用该mockViewModel属性

class ProjectDetailViewModel: ObservableObject {
    
    @Published var name: String {
        didSet {
            self.project.name = name
        }
    }
    
    @Published var notes: String {
        didSet {
            self.project.notes = notes
        }
    }
    
    let project: Project!
    
    init(project: Project) {
        self.project = project
        name = project.name ?? ""
        notes = project.notes ?? ""
    }
    
    private init() {
        project = nil
        name = "Mock project"
        threePhase = false
        notes = "Mock Notes"
    }
    
    static var mockViewModel:ProjectDetailViewModel {
        return ProjectDetailViewModel()
    }
    
}


struct ProjectDetailView_Previews: PreviewProvider {
    static var previews: some View {
        ProjectDetailView(project: ProjectDetailViewModel.mockViewModel)
    }
}

推荐阅读