将@MainActor与环境密钥一起使用的SwiftUI

pbwdgjma  于 2022-11-21  发布在  Swift
关注(0)|答案(1)|浏览(143)

我将@MainActor与视图模型类一起使用,如下面的代码所示,当我试图为模型添加环境键时,出现以下错误:“在同步非隔离上下文中调用主执行元隔离的初始值设定项”init()“”,并且代码在我从类中删除@MainActor之前不会编译。是否可以对同一个类同时使用@MainActor和EnvironmentKey。
视图模型类:

extension HomeView {
@MainActor
    internal final class ViewModel: ObservableObject {
      // More code here...
   }
}

视图模型的EnvironmentKey:

struct HomeViewModelKey: EnvironmentKey {
    static var defaultValue = HomeView.ViewModel()
}

extension EnvironmentValues {
    var homeViewModel: HomeView.ViewModel {
    get { self[HomeViewModelKey.self] }
    set { self[HomeViewModelKey.self] = newValue }
  }
}
e3bfsja2

e3bfsja21#

你可以使用.environmentObject(Store.shared)作为你的store对象,它将模型结构加载到@Published属性中。通常它是一个.shared单例,另一个单例用于预览.preview

相关问题