我不确定为什么此代码不起作用。它可以构建并正常运行,但是视图中没有任何显示。调试时,我可以看到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非常陌生。有人可以在这里解释我在做什么错吗?
答案 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也是一些详细说明