SwiftUI中无法动态向List添加条目问题求助
问题解决:SwiftUI List无法动态添加条目
问题根源
你的代码中UpdateStore没有正确向SwiftUI发送数据变更通知,导致视图无法感知到updates数组的修改,因此点击添加按钮后List不会刷新。此外,move函数的实现也不符合SwiftUI的预期行为。
修复方案
1. 修正UpdateStore的ObservableObject实现
使用SwiftUI提供的@Published属性包装器替代手动的PassthroughSubject,它会自动处理数据变更的通知逻辑:
import SwiftUI import Combine class UpdateStore : ObservableObject { @Published var updates: [Update] init(updates: [Update] = []) { self.updates = updates } }
2. 修复move函数的实现
使用标准库的move(fromOffsets:toOffset:)方法替代swapAt,这是处理集合元素移动的正确方式:
func move(from source: IndexSet, to destination: Int) { store.updates.move(fromOffsets: source, toOffset: destination) }
3. 简化onDelete的实现
同样使用标准库的remove(atOffsets:)方法:
.onDelete { indexSet in store.updates.remove(atOffsets: indexSet) }
原理说明
@Published会自动监听属性的变化,当updates数组执行append、remove或move操作时,会自动触发ObservableObject的变更通知,让SwiftUI视图重新渲染。- 你之前手动实现的
didChange逻辑没有被正确订阅,导致视图无法感知数据变化,而@Published帮我们封装了这部分底层逻辑,更可靠简洁。
修改完成后,点击「Add Update」按钮时,新的条目会立即显示在List中。
内容的提问来源于stack exchange,提问作者user17015942
相关产品推荐
相关产品推荐

