我有一个订阅了 ObservableObject
的 UIViewControllerRepresentable
结构,如下所示:
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
,要么调用另一个更新 View Controller 的 metrics
数组的函数,并且调用其 setChartValues()
方法。
有什么办法可以做到吗?我找不到。
我总是可以像以前只使用 UIKit 那样做,但是使用 MVVM 模式会更好。
帮助将不胜感激,谢谢!
最佳答案
updateUIViewController
应该在更新 View 模型时调用,但是 SwiftUI UIViewControllerRepresentable
和 UIViewRepresentable
中存在一个错误,它没有被调用.
通过定义一个类并在可表示的内部创建它的一个实例,可以解决这个问题。
只需在 chartVM
下添加以下内容,它就会开始工作:
class RandomClass { }
let x = RandomClass()
关于ios - 在 UIViewControllerRepresentable 中,如何将 ObservedObject 的值传递给 View Controller 并在每次值更改时更新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58635048/