从 SwiftUI 视图保存对核心数据项的更改

Persist changes to core data item from SwiftUI view

我正在开发一个 SwiftUI 应用程序,它可以显示来自 Core Data 数据库的多个条目。基本上就是这些应用程序的 XCode 模板实现的内容。

我做了两个更改:

  1. 我将列表项视图的代码放到一个单独的文件中 (BookmarkableItemView)
  2. 我在项目中添加了一个属性 bookmarked,我称之为BookmarkableItem

我认为显示项目列表的代码现在是:

List(bookmarkableItems) { item in
    BookmarkableItemView(item: item)
}

BookmarkableItemView 中,项目 属性 是一个 @ObservedObject

现在,我的 BookmarkableItemView 还包含一个按钮,可以切换视图所代表的项目上的 bookmarked 属性。一切都很好 - 这很容易。但现在我必须坚持改变...

我可以想到以下两种解决方案:

后者在我看来是不行的。第一个解决方案有效。现在 BookmarkableItemView 中有一个 bookmarkAction 属性,所以上面的代码看起来像这样:

List(bookmarkableItems) { item in
    BookmarkableItemView(bookmarkAction: { toggleBookmark(item) }, item: item)
}

该操作由 BookmarkableItemView 调用,因此调用了 toggleBookmark(_ item:) 方法。

但不知何故,我觉得我在 SwiftUI 中遗漏了一些可以简化流程的绑定?当子视图对数据模型执行更改时,如何让我的父视图收到通知,以便我可以保留它们?

onDisappear 检查是否 item.hasChanges

或在 item.hasChanges

上使用 onChange