在UIViewControllerRepresentable中,如何将ObservedObject的值传递给视图控制器,并在每次值更改时对其进行更新?

时间:2019-10-30 23:37:51

标签: ios swift observable swiftui combine

我有一个UIViewControllerRepresentable结构,已订阅ObservableObject,如下所示:

struct ViewControllerWrapper: UIViewControllerRepresentable {
@ObservedObject var chartVM = ChartViewModel()

typealias UIViewControllerType = ViewController


func makeUIViewController(context: Context) -> ViewController {
    let lineChartView = LineChartView()
    let vc = ViewController(lineChartView: lineChartView)
    return vc
}

func updateUIViewController(_ uiViewController: ViewController, context: Context) {
    uiViewController.metrics = chartVM.metrics
    uiViewController.setChartValues()
}
}

我希望这样,当ObservedObject更改时,要么调用updateUIViewController,要么另一个函数更新视图控制器的metrics数组并调用它的setChartValues()方法。

有没有办法做到这一点?我找不到一个人

我总是可以像以前只使用UIKit一样来做,但是使用该MVVM模式做起来会更好

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

updateUIViewController应该在更新视图模型时调用,但是SwiftUI UIViewControllerRepresentableUIViewRepresentable中有一个错误,没有被调用。

可以通过定义一个类并在可表示对象内部创建一个实例来解决此问题。

只需在chartVM下添加以下内容,它就会开始起作用:

class RandomClass { }
let x = RandomClass()