SwiftData|显示和处理临时数据
了解如何在 SwiftData 中处理服务端返回的临时数据,并复用 SwiftData 构建的组件。
对于本地已保存的 SwiftData 数据,可以使用 @Query
或通过 PersistentIdentifier
查询后显示。
对于通过网络获取的数据(未保存到 SwiftData 数据库中),需要转成成 SwiftData 模型对象结构,然后才能复用 View 组件进行显示。
在实践中,仍然存在一些细节问题,例如:
- 当一个网络对象,在本地已有对应的副本时,是否应当优先显示本地副本?(因此本地数据可能包含其他关联数据,例如备注)
- 如何判断本地是否有本地副本?
- 如何实现对于网络对象和本地对象,显示不同的数据?(例如本地副本显示更多信息)
- 当用户将网络对象添加到本地时,如何处理过渡?
背景
在 Filmo 应用中,需要显示从豆瓣、IMDB 等其他平台获取到的电影、书籍数据。
- 已经创建了一个
BookmarkDetailView()
组件,用于显示本地Bookmark
模型对象 - 对于获取到的服务端数据的显示,我希望复用
BookmarkDetailView()
组件。因此,需要将Struct
转成Bookmark
对象。
在 Loader 中,优先显示本地对象
本地收藏夹中的电影,可能包含用户添加的 Person
、Comments
等关联数据。
如果总是将服务端返回的 Struct ,转成一个临时的 Bookmark 对象,则无法显示关联数据 —— 本地 Bookmark
对象和临时 Bookmark
对象 PersistentIdentifier
是两个独立的对象。