首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

表单中的SwiftUI - ForEach不会更新内容,即使它被正确存储

基础概念

SwiftUI 是苹果推出的一个声明式 UI 框架,用于构建 macOS、iOS、watchOS 和 tvOS 应用程序。ForEach 是 SwiftUI 中的一个视图构造器,用于遍历集合(如数组)并渲染每个元素。

问题原因

ForEach 不会更新内容的原因通常是因为 SwiftUI 的依赖跟踪机制。SwiftUI 只会在其依赖发生变化时重新渲染视图。如果集合本身没有发生变化(例如,数组的引用没有变,只是数组内部元素变了),ForEach 就不会重新渲染。

解决方法

  1. 确保集合是可变的:使用可变数组,而不是不可变数组。
  2. 使用 @State@ObservedObject:确保集合的变化能够被 SwiftUI 检测到。

示例代码

假设我们有一个简单的表单,其中包含一个文本字段和一个按钮,点击按钮会向数组中添加一个新的字符串。

代码语言:txt
复制
import SwiftUI

struct ContentView: View {
    @State private var items = ["Item 1", "Item 2"]
    
    var body: some View {
        VStack {
            ForEach(items.indices, id: \.self) { index in
                Text(items[index])
            }
            
            Button(action: {
                items.append("New Item")
            }) {
                Text("Add Item")
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

在这个示例中,items 是一个 @State 属性包装的可变数组。每次点击按钮时,items 数组都会被修改,这会导致 ForEach 重新渲染。

参考链接

通过这种方式,你可以确保 ForEach 能够正确地响应集合的变化并更新 UI。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券