最近几天我开始使用SwiftUI,这很有意义。 但是,在更新持久列表方面我很挣扎。
我正在使用UserDefaults和JSONEncoder。
struct ContentView:查看{ 私人var slackController = Slack() @EnvironmentObject var userData:UserData
var body: some View {
return NavigationView {
List {
ForEach(self.userData.statuses) { myStatus in
HStack {
// row code
}
.onTapGesture {
self.slackController.setStatus(text: myStatus.description, emoji: myStatus.emoji)
}
}
.onDelete(perform: delete)
}
}
}
func delete(at offsets: IndexSet) {
self.userData.statuses.remove(atOffsets: offsets)
}
插入和删除操作均有效,因为当我重新启动该应用程序时,我可以看到更改。
private let defaultStatuses: [Status] = [
Status(emoji: ":spiral_calendar_pad:", description: "In a meeting", expireHours: 1),
Status(emoji: ":car:", description: "Commuting", expireHours: 12),
]
final class UserData: ObservableObject {
let didChange = PassthroughSubject<UserData, Never>()
@UserDefault(key: "ApiToken", defaultValue: "")
var apiToken: String {
didSet {
didChange.send(self)
}
}
@UserDefault(key: "Statuses", defaultValue: defaultStatuses)
var statuses: [Status] {
didSet {
didChange.send(self)
}
}
}
我看到调用了didChange.send(self)
,但我不知道为什么列表没有更新。
该代码也放在repo中,以防我错过了有用的示例代码。 我还一直在使用SwiftUITodo来弄清楚我做错了。
任何帮助/指导将不胜感激。