SwiftUIの基本を身につけたい方はこちら

【SwiftUI】@EnvironmentObjectを使うと、プレビューが使えなくなる件について

事象

以下のように、ObservableObjectを作って、EnvironmentObjectで使おうとすると、プレビューが使えなくなってしまいます。

class ImageData: ObservableObject {
    @Published var imageString = "car"
    @Published var imageColor = Color.red
}

struct ContentView: View {
    @EnvironmentObject var imageData: ImageData
    
    var body: some View {
        Image(systemName: imageData.imageString)
            .foregroundColor(imageData.imageColor)
    }
}

このようなよくわからないウィンドウが表示されます。。

原因

プレビューに、.environmentObjectを追加していないから。

解決方法

プレビューに以下のように.environmentObject()を追加する。

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