我如何在预览中构造一个带 swiftui class 注释的主要角色

how do I construct a swiftui class annotated mainactor in preview

所以 - 我有一个 class 称为设置,我在所有地方都使用它 - 特别希望其他视图在内容更改时做出反应。我用 @MainActor 对其进行了注释 - 当 运行 应用程序时,它一切正常。

但是,在预览中我只是尝试创建一个实例:

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

突然间,虽然主程序编译并运行良好 - 预览不 -

call to main actor-isolated initialiser 'init()' in a synchronous non isolated context.

我可以使用如下代码解决问题:

struct ContentView_Previews: PreviewProvider {
    
    var settings : Settings
    
    static func get_settings() -> Settings
    {
        var the_array : [Settings] =  []
        DispatchQueue.main.asyncAndWait( execute: DispatchWorkItem {
            the_array.append( Settings())
        })
        return the_array[0]
    }
    
    init()
    {
        self.settings = ContentView_Previews.get_settings()
    }
    
    static var previews: some View {        
        Group {
            ContentView( settings: Settings())
        }
    }
}

这显然是荒谬的。我确定有更好的方法 - 但不知道它是什么 - 我怎样才能在一两行中做到这一点,而不必创建辅助函数?

顺便说一句 - 此代码每次都会使预览提供程序崩溃:



struct ContentView_Previews: PreviewProvider {
        
    static func get_settings() -> Settings
    {
        var the_array : [Settings] =  []
        DispatchQueue.main.asyncAndWait( execute: DispatchWorkItem {
            the_array.append( Settings())
        })
        return the_array[0]
    }
  
    static var previews: some View {        
        Group {
            ContentView( settings: get_settings())
        }
    }
}

我能够通过使用 @MainActor

注释预览结构来解决这个问题
@MainActor
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {        
        Group {
            ContentView( settings: Settings())
        }
    }
}