为什么我不能在SwiftUI中附加到视图内的状态数组?

时间:2020-05-01 16:55:36

标签: arrays swift swiftui state

我不确定为什么此代码不起作用。它可以构建并正常运行,但是视图中没有任何显示。调试时,我可以看到append()调用实际上并没有将项目添加到数组中,但是没有错误:

import SwiftUI

struct Test: View {
    @State private var array: [String] = []

    var body: some View {
        self.array.append("A")
        self.array.append("B")
        self.array.append("C")

        return VStack {
            ForEach(self.array, id: \.self) {string in
                Text(string)
            }
        }
    }
}

struct Test_Previews: PreviewProvider {
    static var previews: some View {
        Test()
    }
}

我也尝试过在init(_ :)中进行追加,结果相同。如果我使用@State private var array: [String] = ["A", "B", "C"]之类的值初始化数组,那么它会起作用,因此似乎缺少一些状态变量细微差别。我对Swift非常陌生。有人可以在这里解释我在做什么错吗?

1 个答案:

答案 0 :(得分:8)

我试图在Xcode 11.4.1上运行您的代码,但收到警告:
Modifying state during view update, this will cause undefined behavior

发生此错误是因为您试图在实际渲染时修改SwiftUI视图的状态。

因此,您可以尝试在onAppear块中附加项目

struct Test: View {

    State private var array: [String] = []

    var body: some View {
        VStack {
            ForEach(self.array, id: \.self) {string in
                Text(string)
            }
        }.onAppear { // Prefer, Life cycle method
            self.array.append("A")
            self.array.append("B")
            self.array.append("C")
        }
    }
}

然后,您将可以在屏幕上看到您的项目。

here也是一些详细说明