@新的SwiftUI视图完全加载后,状态变量将被清除
每当我调用view CardronaView()时,@State变量将加载正确的数据约3秒钟,然后将其重置回默认值,即空字符串。我怎样才能解决这个问题?我用以下内容调用新视图:@新的SwiftUI视图完全加载后,状态变量将被清除,swiftui,Swiftui,每当我调用view CardronaView()时,@State变量将加载正确的数据约3秒钟,然后将其重置回默认值,即空字符串。我怎样才能解决这个问题?我用以下内容调用新视图: NavigationView { List { // MARK: - Display Cardrona NavigationLink(destination: CardronaView()) {
NavigationView {
List {
// MARK: - Display Cardrona
NavigationLink(destination: CardronaView()) {
ZStack(alignment: .topLeading) {
Image("Cardrona-header")
Text("Cardrona").font(.largeTitle).fontWeight(.semibold).foregroundColor(Color.black)
Text(cardTemp).foregroundColor(Color.black).padding(.top, 50).font(.title3)
}
}
}
}
新视图中的代码如下所示:
struct CardronaView: View {
@State var cardDate: String = ""
var body: some View {
List {
Text(cardDate)
}.onAppear {
Api().getJsonCard { (Cardrona) in
cardDate = "\(Cardrona.data_updated)"
}
}
}
}
在发出网络请求时,最好在加载下一个视图之前执行该请求。这样做有很多很好的理由,因为如果调用不成功,则不会加载新视图,从而避免了糟糕的用户体验。在这里,您会向用户显示一个警报,表示无法拨打电话 如果网络调用成功,则将结果传递到新视图并填充它 由于网络调用是异步的,因此您进行了此调用。在外观上,如果调用时间过长,您将看到空字符串,因为您的视图已加载 我更改了您的代码,使网络调用在“先例”视图中进行。但是,当用户点击ListCell时,您可能应该添加代码,如果调用成功,则NavigationLink会触发其目标参数,即CardonaView(cardDate:)
如果通过某种类型的数据模型从fist view传递数据,则会得到更好的结果。同时,使用类似云的东西可能是更好的方法
struct ContentView: View {
@State var cardDate: String = ""
var body: some View {
NavigationView {
List {
// MARK: - Display Cardrona
NavigationLink(destination: CardronaView(cardDate: cardDate)) {
ZStack(alignment: .topLeading) {
Image("Cardrona-header")
Text("Cardrona").font(.largeTitle).fontWeight(.semibold).foregroundColor(Color.black)
Text(cardTemp).foregroundColor(Color.black).padding(.top, 50).font(.title3)
}
}
}
}
.onAppear {
Api().getJsonCard { (Cardrona) in
cardDate = "\(Cardrona.data_updated)"
}
}
}
struct CardronaView: View {
var cardDate: String
var body: some View {
List {
Text(cardDate)
}
}
}