繁体   English   中英

SwiftUI如何更新列表动态

[英]SwiftUI how to update List dynamic

我正在使用刚刚开始的 SwiftUI。 我经常混淆声明式编程和命令式编程之间的区别。

控制台日志显示错误:

ForEach<Range, Int, Text> 计数 (2).= 其初始计数 (1)。 ForEach(_:content:)应该只用于常量数据。 而是使数据符合Identifiable或使用ForEach(_:id:content:)并提供明确的id

为什么?如何动态更新列表?SwiftUI如何处理数据源?

struct TestView: View {
    @State var n = 1
    var body: some View {
        VStack {
            Button.init("update") {
                self.n += 1
            }
            AView.init(n: n)
        }
    }
}

struct AView: View {
    let n: Int
    var body: some View {
        List {
            ForEach(0..<n) { i in
                Text.init(String(i))
            }
        }
    }
}

ForEach(_:id:content:)ForEach(_:content:) :) 的区别在于id参数。

如果您使用 static ForEach循环生成一次并且在您修改n时不会刷新。

尝试这个:

struct AView: View {
    let n: Int

    var body: some View {
        List {
            ForEach(0 ..< n, id:\.self) { i in // <- add `id` parameter
                Text(String(i))
            }
        }
    }
}

你可以看看Why does.self for ForEach? 以获得更详细的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM