是否可以在Appear上查看内容视图?该方法被调用,但列表未更新 似乎应该采取某种方式
import SwiftUI
var texts = ["0", "0", "0"]
struct ContentView: View {
var body: some View {
List {
Text(texts[0])
Text(texts[1])
Text(texts[2])
}
.onAppear(){
texts[0] = "1"
print(texts)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
答案 0 :(得分:0)
如果要在变量更改时更新视图并将其放置在视图中,则@State
@State var texts = ["0", "0", "0"]
答案 1 :(得分:0)
如果要进行重新渲染,则需要使用状态。
如果将SELECT TOP(10000) * INTO #A
变量带入texts
结构中,并将其声明为ContentView
,那么它将导致@State
重新呈现。
请注意,在闭包中引用ContentView
时,必须在self
中使用onAppear
。
texts
但是,如果您希望跨多个视图共享struct ContentView: View {
@State private var texts = ["0", "0", "0"] . // Apple suggests that these should be private
var body: some View {
List {
Text(texts[0])
Text(texts[1])
Text(texts[2])
}
.onAppear(){
self.texts[0] = "1"
print(self.texts)
}
}
}
,则需要创建一个环境对象。您可以按照以下步骤进行操作:
创建一个ObservableObject。
texts
然后在SceneDelegate中创建此对象的实例,并将其附加到ContentView。
class Texts: ObservableObject {
@Published var texts = ["0", "0", "0"] // You can obviously choose whichever name you want for this variable.
}
然后在let texts = Texts()
let contentView = ContentView().environmentObject(texts)
中,您可以像这样使用它:
ContentView.swift