reactive-programming - 为什么我的 SwiftUI 列表行并不总是在内部更新
问题描述
我有一个按完成和日期分组的提醒列表。数据来自称为 global 的 ObservedObject DataStore。我将 realmBinding 传递给单元格。单元格可以更新此绑定,它将触发数据存储更新。
List {
// Past Due
if self.global.pastDueReminders.count > 0 {
Section(header: SectionHeader {}){
ForEach(self.global.pastDueReminders) { reminder in
NavigationLink(destination: ReminderDetail( reminder: reminder.realmBinding())) {
GeneralReminderCell(reminder: reminder.realmBinding())
}
}
}
}
// Completed
if self.global.completeReminders.count > 0 {
// Same as PastDue but for Completed
}
}
单元格看起来像:
struct GeneralReminderCell: View {
@Binding var reminder:Reminder
var body: some View {
HStack(alignment:.top, spacing: 10) {
Image(systemName: reminder.completed ? "checkmark.circle.fill" : "circle")
.onTapGesture(perform:{ self.reminder.completed = !self.reminder.completed })
VStack(alignment: .leading, spacing: 2) {
Text("Follow up with \(reminder.client.fullName)").fontWeight(.semibold)
if reminder.title.count > 0 {
Text(reminder.title)
}
Text(reminder.date.formatted()).foregroundColor(.gray)
}
}.padding(.vertical, 10)
}
}
当点击图像时,它会切换提醒完成状态,并且它在列表视图中的位置会发生变化。完成后,点击的图像应更改为已填写的支票。这种行为几乎总是按预期发生,但有时检查的图像会与提醒的完成状态不同步。我已经研究了很长一段时间,并没有取得太大进展。为什么检查的图像并不总是与数据的状态相匹配?
解决方案
推荐阅读
- python - 无法从 Vader Sentiment Analyzer 获得极性分数
- firebase - 如何在颤振中使用放大?
- unit-testing - 使用 testify 两次模拟不同输入和输出的接口方法
- java - 如果 Spinner 下拉列表中的条件
- javascript - 反应不从mysql获取数据
- c - 将文件中的字符串和整数读入结构 - C
- node.js - 异步等待不起作用,因为我期望我是节点 js 的新手
- unit-testing - 在为 Web 组件编写单元测试时尝试模拟 Stenciljs 存储(@stencil/store)状态(多次)
- javascript - React/JavaScript,有人可以解释为什么 setState 在函数期间似乎没有正确更新状态吗?
- python - 使用多列的熊猫数据框滚动应用功能