【问题标题】:SwiftUI Using @MainActor with EnvironmentKeySwiftUI 将 @MainActor 与 EnvironmentKey 结合使用
【发布时间】:2022-11-17 08:38:11
【问题描述】:

我将 @MainActor 与视图模型类一起使用,如下面的代码所示,当我尝试为模型添加环境密钥时,出现以下错误: “在同步非隔离上下文中调用主要参与者隔离初始化器‘init()’” 在我从类中删除@MainActor 之前,代码不会编译。 是否可以将 @MainActor 和 EnvironmentKey 用于同一类。

查看模型类:

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

视图模型的环境键:

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

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

【问题讨论】:

    标签: swift swiftui swiftui-environment mainactor


    【解决方案1】:

    您可以将 .environmentObject(Store.shared) 用于将模型结构加载到 @Published 属性中的存储对象。通常它是一个单例.shared和另一个用于预览的单例.preview

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2020-10-18
      • 1970-01-01
      • 2021-10-13
      • 2022-08-21
      • 1970-01-01
      相关资源
      最近更新 更多