@Published 字符串变量不更新视图
@Published String Variable Not Updating View
我在 Observableobejct 中的 @Published 字符串变量不会以某种方式更新文本。
完全相同的代码在不同的视图中工作,但我不明白为什么在这个视图中不起作用。
当我搜索Google时,我只知道检查observableobject的初始化,将didSet设置为变量,但所有这些都不起作用,我只是恢复了。
以下代码在 viewdidappear() 中的字符串更改时不会更新视图。
struct StorageUpgradeView: View {
@ObservedObject private var storagevm = StorageVM()
@Environment(\.presentationMode) var presentationMode
var body: some View {
ZStack {
VStack {
ZStack(alignment: .center) {
HStack {
Button(action: {
presentationMode.wrappedValue.dismiss()
}, label: {
Image("Image_arrowleft")
.resizable()
.frame(width: 30, height: 30, alignment: .leading)
})
Spacer()
}
Text("Storage Upgrade".localized)
.font(.system(size: 24))
}
.padding()
Text(storagevm.month_price)
Text("\(storagevm.halfyear_price)")
Spacer()
}
}
.onAppear(perform: {
storagevm.viewdidappear()
})
.frame(maxWidth: .infinity, maxHeight: .infinity)
.foregroundColor(Color("Theme_OnSurface"))
.background(Color("Theme_Surface").ignoresSafeArea())
}
}
class StorageVM: ObservableObject {
@Published var month_price = "plpl"
@Published var halfyear_price: String
init() {
halfyear_price = "asdf"
}
func viewdidappear() {
month_price = "BlahBlah"
halfyear_price = "were"
}
}
但是当我通过更改选项卡切换视图时,视图打印得很好。这里有什么问题?经过两天的谷歌搜索和敲打我的头,我无法弄清楚。
每当您想观察@Published 属性时,您都希望在元素前使用$ 符号。所以尝试使用 Text(storagevm.$month_price)
使用 StateObject 而不是 ObservedObject 对我来说效果很好!请确保您的 iOS 目标需要为 14.0 或更高版本才能使此解决方案生效。
我在 Observableobejct 中的 @Published 字符串变量不会以某种方式更新文本。
完全相同的代码在不同的视图中工作,但我不明白为什么在这个视图中不起作用。
当我搜索Google时,我只知道检查observableobject的初始化,将didSet设置为变量,但所有这些都不起作用,我只是恢复了。
以下代码在 viewdidappear() 中的字符串更改时不会更新视图。
struct StorageUpgradeView: View {
@ObservedObject private var storagevm = StorageVM()
@Environment(\.presentationMode) var presentationMode
var body: some View {
ZStack {
VStack {
ZStack(alignment: .center) {
HStack {
Button(action: {
presentationMode.wrappedValue.dismiss()
}, label: {
Image("Image_arrowleft")
.resizable()
.frame(width: 30, height: 30, alignment: .leading)
})
Spacer()
}
Text("Storage Upgrade".localized)
.font(.system(size: 24))
}
.padding()
Text(storagevm.month_price)
Text("\(storagevm.halfyear_price)")
Spacer()
}
}
.onAppear(perform: {
storagevm.viewdidappear()
})
.frame(maxWidth: .infinity, maxHeight: .infinity)
.foregroundColor(Color("Theme_OnSurface"))
.background(Color("Theme_Surface").ignoresSafeArea())
}
}
class StorageVM: ObservableObject {
@Published var month_price = "plpl"
@Published var halfyear_price: String
init() {
halfyear_price = "asdf"
}
func viewdidappear() {
month_price = "BlahBlah"
halfyear_price = "were"
}
}
但是当我通过更改选项卡切换视图时,视图打印得很好。这里有什么问题?经过两天的谷歌搜索和敲打我的头,我无法弄清楚。
每当您想观察@Published 属性时,您都希望在元素前使用$ 符号。所以尝试使用 Text(storagevm.$month_price)
使用 StateObject 而不是 ObservedObject 对我来说效果很好!请确保您的 iOS 目标需要为 14.0 或更高版本才能使此解决方案生效。