SwiftData|显示和处理临时数据

了解如何在 SwiftData 中处理服务端返回的临时数据,并复用 SwiftData 构建的组件。

对于本地已保存的 SwiftData 数据,可以使用 @Query 或通过 PersistentIdentifier 查询后显示。

对于通过网络获取的数据(未保存到 SwiftData 数据库中),需要转成成 SwiftData 模型对象结构,然后才能复用 View 组件进行显示。

在实践中,仍然存在一些细节问题,例如:

  • 当一个网络对象,在本地已有对应的副本时,是否应当优先显示本地副本?(因此本地数据可能包含其他关联数据,例如备注)
  • 如何判断本地是否有本地副本?
  • 如何实现对于网络对象和本地对象,显示不同的数据?(例如本地副本显示更多信息)
  • 当用户将网络对象添加到本地时,如何处理过渡?

背景

在 Filmo 应用中,需要显示从豆瓣、IMDB 等其他平台获取到的电影、书籍数据。

  • 已经创建了一个BookmarkDetailView() 组件,用于显示本地 Bookmark 模型对象
  • 对于获取到的服务端数据的显示,我希望复用BookmarkDetailView() 组件。因此,需要将 Struct 转成 Bookmark 对象。

在 Loader 中,优先显示本地对象

本地收藏夹中的电影,可能包含用户添加的 PersonComments 等关联数据。

如果总是将服务端返回的 Struct ,转成一个临时的 Bookmark 对象,则无法显示关联数据 —— 本地 Bookmark 对象和临时 Bookmark 对象 PersistentIdentifier 是两个独立的对象。