You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:42:55