簡體   English   中英

@Published 字符串變量不更新視圖

[英]@Published String Variable Not Updating View

我在 Observableobejct 中的 @Published 字符串變量不會以某種方式更新 Text。

完全相同的代碼在不同的視圖中工作,但我無法弄清楚為什么這在這個視圖中不起作用。

當我搜索谷歌時,我發現只是檢查 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 或更高版本才能使此解決方案正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM