我正在跟着这个SwiftUI教程:https://developer.apple.com/tutorials/swiftui/handling-user-input
这里的概念非常适合我要创建的应用程序。但是我有一个问题。
尽管本教程非常适合显示使用环境对象更新SwiftUI视图的基础知识(在本例中,是将星状图像添加到收藏夹中的元素。),但我该如何保存这些更改以使其更持久应用程序的运行时。
现在,我可以收藏一堆地标,但是如果我退出并重新启动该应用程序,这些选择将丢失。是否有一种“ SwiftUI友好”的方式来存储这些收藏夹选项,并在冷启动该应用程序时让主“地标列表”视图自动绘制星形图像以标记以前选择的收藏夹?我猜想UserDefaults就是这样,但是我不知道该如何适应这些时髦的环境对象。
谢谢。
编辑:
我现在正在使用UserDefaults来持久存储“ TeamProfile”对象的数组,只要团队被标记为“收藏夹”,该对象就会追加到该数组中。
在我的SwiftUI代码中,我尝试使用以下代码将Star图片添加到收藏夹。这些TeamRow项由父视图内置到列表中。
struct TeamRow: View {
var team: TeamProfile
var body: some View {
HStack {
Text(team.TeamName)
Spacer()
if team.isFavourite || teamsSelected.contains(team) {
Image(systemName: "star.fill")
.imageScale(.medium)
.foregroundColor(.yellow)
}
}
}
}
teamsSelected是UserDefaults维护的数组。它应该在我的持久数组中为TeamRow项添加一个星号(该数组在应用启动时加载,我可以验证其内容)。但是,只有当我在应用会话期间做出 new 最喜欢的选择时,才会在行上绘制星星。
我可以使用UserDefaults验证我保留的数据的内容,所以我不知道为什么SwiftUI在启动应用程序时通过加注正确的元素而不响应。