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

SwiftUI动态更新List异常:添加元素后列表未正确显示

SwiftUI中List无法显示新增元素的问题解决

问题原因

@State 属性由SwiftUI框架负责管理其生命周期和状态追踪。在自定义 init 方法中直接修改 @State 变量时,SwiftUI尚未完成对该状态的绑定与接管,此时的修改不会被框架追踪。后续SwiftUI会使用初始定义的数组值(仅包含"one"和"two")来初始化状态,覆盖你在init中的修改,最终导致List只显示前两个元素。

解决方案

方案1:直接在@State初始值中添加元素

@State private var itemList: [MyListItem] = [
    MyListItem(value: "one"),
    MyListItem(value: "two"),
    MyListItem(value: "three")
]

方案2:利用onAppear生命周期方法添加元素

onAppear 会在视图完成加载并即将显示时触发,此时@State已被SwiftUI正确管理,修改会触发视图更新:

struct ContentView: View {
    @State private var itemList: [MyListItem] = [MyListItem(value: "one"),MyListItem(value: "two")]

    var body: some View {
        List(itemList, id: \.id) { item in
            Text(item.value)
        }
        .onAppear {
            itemList.append(MyListItem(value: "three"))
        }
    }
}

方案3:使用@State初始值闭包

如果需要在初始化阶段完成元素添加,可以通过闭包形式初始化@State,SwiftUI会正确处理这个初始化过程:

@State private var itemList: [MyListItem] = {
    var initialList = [MyListItem(value: "one"),MyListItem(value: "two")]
    initialList.append(MyListItem(value: "three"))
    return initialList
}()

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:03:17