【问题标题】:Why does Core Data context object have to be passed via environment variable?为什么 Core Data 上下文对象必须通过环境变量传递?
【发布时间】:2020-09-18 18:01:22
【问题描述】:

SceneDelegate 内部,上下文是通过.environment(\.managedObjectContext, context) 传递的,为什么不能通过View 的属性传递呢?这样做有什么好处?

所以不要在下面做

let contentView = FlightsEnrouteView()
    .environment(\.managedObjectContext, context)

我们可以通过视图的初始化器传递上下文

let contentView = FlightsEnrouteView(context: context)

所以里面FlightsEnrouteView应该是,

struct FlightsEnrouteView: View {
    var context: NSManagedObjectContext
}

测试它并编译

【问题讨论】:

    标签: swift core-data swiftui


    【解决方案1】:

    为什么不能通过 View 的属性传递?这样做有什么好处?

    可以。只是它被环境中的@FetchRequest 等其他包装器使用,但没有人阻止你组合它们,因为上下文是引用类型的对象,所以你可以随意传递它的引用。

    所以以下是绝对有效的:

    let contentView = FlightsEnrouteView(context: context)
        .environment(\.managedObjectContext, context)
    

    struct FlightsEnrouteView: View {
        @EnvironmentObject(\.managedObjectContext) var envContext
        var context: NSManagedObjectContext
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 2012-08-24
      • 2012-07-10
      • 2019-01-07
      • 2017-07-30
      相关资源
      最近更新 更多