如何检测核心数据对象属性的更改

Spa*_*Dog 2 swiftui

我有一个名为 的核心数据实体Cake,它具有以下属性:

  • 使用的成分数量
  • 成分数量总计
  • 颜色
  • 重量

我从实体中读取了一个对象,现在我有这样的东西

let orangeCake = Cake(type:"orange", context:coreDataContext)
Run Code Online (Sandbox Code Playgroud)

现在我想展示一个ProgressView. 我想传递进度视图,一个绑定numberOfIngredientsBeingUsed属性,代表目前为止正在使用的成分数量,以及一个常规属性numberOfIngredientsTotal,代表制作蛋糕所需的成分总数。

这个想法是,当numberOfIngredientsBeingUsed主视图发生变化时,进度视图会更新,因为它是一个绑定属性。

我怎么做?我无法思考,因为这numberOfIngredientsBeingUsed是蛋糕对象的属性orangeCake

Asp*_*eri 5

CoreData 托管对象是 的类型ObservableObject,因此您不需要传递一个属性,而是需要注入Cakeas的整个实例ObservedObject并在内部使用其属性ProgressView,每当代码其他部分中的某个位置更新相应的对象时,它将更新(并刷新视图)。

所以它应该看起来像

struct ProgressView: View {
   @ObservedObject var model: Cake

   var body: some View {
      Text("Progress: \(model.numberOfIngredientsBeingUsed) of \(model.numberOfIngredientsTotal)")
   }
}
Run Code Online (Sandbox Code Playgroud)