如何从我的 ObservableObject 类调用我的 View 结构中的方法

Posted

技术标签:

【中文标题】如何从我的 ObservableObject 类调用我的 View 结构中的方法【英文标题】:How to call a method in my View struct from my ObservableObject class 【发布时间】:2020-10-13 22:47:02 【问题描述】:

我正在为我的 Picker 选择使用 @ObservedObject PropertyWrapper,并且我想在选择更改时在我的 View 结构中调用一个方法。我该怎么做?

ObservableObject 代码:

class SphereModel: ObservableObject 
    @Published var selection = -3 
        didSet 
            // Call method (getAD()) here
        
    

查看代码:

struct ContentView: View 
    
    @ObservedObject var sphereModel = SphereModel()

    var body: some View 
        Picker("Sphere Thickness", selection: $sphereModel.selection) 
            ForEach((-24..<1).reversed(), id: \.self) 
                Text(String(format: "%.1f", Double($0) / 2)).tag($0)
            
        
    
    
    // Method to call
    func getAD() 
        
    

我该怎么做? 谢谢!

【问题讨论】:

【参考方案1】:

您可以在视图中直接使用onReceive

class SphereModel: ObservableObject 
    @Published var selection = -3


struct ContentView: View 
    @ObservedObject var sphereModel = SphereModel()

    var body: some View 
        Picker("Sphere Thickness", selection: $sphereModel.selection) 
            ForEach((-24 ..< 1).reversed(), id: \.self) 
                Text(String(format: "%.1f", Double($0) / 2)).tag($0)
            
        
        .onReceive(sphereModel.$selection)  selection in
            print(selection)
            getAD()
        
    

    func getAD() 
        print("getAD")
    

【讨论】:

您可以直接收听已发布的发布者,而不是通过Just 发布者:.onReceive(sphereModel.$selection) ...

以上是关于如何从我的 ObservableObject 类调用我的 View 结构中的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何强制 AutoClosable 警告传播到 Java 中的类调用者?

如何使用 ObservableObject 更新 UIViewRepresentable

SwiftUI:如何使用位置管理器类的已发布属性更新一个类(ObservableObject)的已发布属性?

如何链接 ObservableObject?

SwiftUI - 如何在@ObservableObject 中获取@EnvironmentObject 数据

如何确认 AppDelegate 的 ObservableObject?