首页 > 解决方案 > 如何解决无法在此文件中预览的问题?

问题描述

我目前正在使用 SwiftUI 开发应用程序。

我可以成功构建这些代码,并且这些代码在模拟器中运行良好。

但是当我在画布上看到代码的预览时,预览不起作用,并且下面出现错误消息:

Cannot preview in this file - My.app may have crashed

在这种情况下,如何解决此错误并在画布上查看预览?


以下是代码:

我看不到 FirstView.swift 和 SecondView.swift 的预览

内容视图.swift

import SwiftUI

struct ContentView: View {
    
    @ObservedObject var viewModel = ViewModel()
    
    var body: some View {
        TabView {
            FirstView()
                .tabItem {
                    Text("First")
            }.tag(1)

            SecondView()
                .tabItem {
                    Text("Second")
            }.tag(2)
        }
        .environmentObject(viewModel)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

FirstView.swift

import SwiftUI

struct FirstView: View {

    @EnvironmentObject var firstCheck: ViewModel
    
    var body: some View {
        VStack{
            if firstCheck.check == true{
                    Text("checked")
            }
        }
    }
}

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
    }
}

SecondView.swift

import SwiftUI

struct SecondView: View {

@EnvironmentObject var secondCheck: ViewModel

    var body: some View {
        VStack{
            Toggle(
                isOn: $secondCheck.check
            ){
                Text("change")
            }
            if self.secondCheck.check == true{
                Text("checked")
            }
        }
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
    }
}

ViewModel.swift

import Foundation

final class ViewModel: ObservableObject {
    @Published var check: Bool = false
}

Xcode:版本 11.7

斯威夫特:斯威夫特 5

标签: swiftswiftui

解决方案


您的视图需要@EnvironmentObject预览:

struct FirstView_Previews: PreviewProvider {
    static var previews: some View {
        FirstView()
            .environmentObject(ViewModel())
    }
}

struct SecondView_Previews: PreviewProvider {
    static var previews: some View {
        SecondView()
            .environmentObject(ViewModel())
    }
}

推荐阅读