Я начал играть с SwiftUI в последние несколько дней, и это имеет большой смысл.Тем не менее, я испытываю трудности при обновлении постоянного списка.
Я использую UserDefaults и JSONEncoder.
struct ContentView: View {private var slackController = Slack () @EnvironmentObject varuserData: 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)
вызывается,но я не могу понять, почему список не обновляется.
Код также находится в репо на случай, если я что-то пропустил из примера, который полезен.Я также использовал SwiftUITodo , чтобы попытаться понять, что я делаю неправильно.
Любая помощь / руководство будет приветствоваться.