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
相关产品推荐
相关产品推荐

