我如何在预览中构造一个带 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())
}
}
}
所以 - 我有一个 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())
}
}
}