微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

@Published 字符串变量不更新视图

如何解决@Published 字符串变量不更新视图

我在 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 或更高版本才能使此解决方案起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。