我有一个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模式做起来会更好
非常感谢您的帮助!
答案 0 :(得分:2)
updateUIViewController
应该在更新视图模型时调用,但是SwiftUI UIViewControllerRepresentable
和UIViewRepresentable
中有一个错误,没有被调用。
可以通过定义一个类并在可表示对象内部创建一个实例来解决此问题。
只需在chartVM
下添加以下内容,它就会开始起作用:
class RandomClass { }
let x = RandomClass()