首页 > 解决方案 > 如何获得更新另一个视图中的变量的结构函数在更改时也刷新该视图?

问题描述

import SwiftUI
import Combine

struct ContentView: View {
    
    var subtract = MinusToObject()
    
    
    var body: some View {
        VStack{
            
            Text("The number is \(MyObservedObject.shared.theObservedObjectToPass)")
            Text("Minus")
                .onTapGesture {
                    subtract.subtractIt()
                }
            
            NavigationView {
                NavigationLink(destination: AnotherView()) {
                    Text("Push")
                }.navigationBarTitle(Text("Master"))
            }

            
        }
    }
}

class MyObservedObject: ObservableObject {
    static let shared = MyObservedObject()
    private init() { }
    
    @Published var theObservedObjectToPass = 6
}

struct MinusToObject {
    func subtractIt() {
        MyObservedObject.shared.theObservedObjectToPass -= 1
    }
}

当我点击Minus调用subtract实例的函数时,我知道值会发生变化,因为如果我转到另一个视图,我可以看到新值,但当前视图不会更新。

我想我必须放置一个属性包装器var subtract = MinusToObject()(我已经尝试了几个相当盲目的),我觉得我应该在$某个地方放置一个双向绑定,但我不知道在哪里。

标签: swiftswiftui

解决方案


MinusToObject是多余的。这是方法(如果您愿意,可以保持 MyObservedObject 共享)...

struct ContentView: View {
    
    @ObservedObject private var vm = MyObservedObject.shared
    //@StateObject private var vm = MyObservedObject.shared     // << SwiftUI 2.0
    
    
    var body: some View {
        VStack{
            
            Text("The number is \(vm.theObservedObjectToPass)")
            Text("Minus")
                .onTapGesture {
                    self.vm.theObservedObjectToPass -= 1
                }
            
            NavigationView {
                NavigationLink(destination: AnotherView()) {
                    Text("Push")
                }.navigationBarTitle(Text("Master"))
            }
            
        }
    }
}

推荐阅读