UIViewControllerRepresentable

UIViewControllerRepresentable

我有一个订阅 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 UIViewControllerRepresentableUIViewRepresentable 中存在一个错误,它没有被调用。

通过定义一个类并在可表示对象中创建它的一个实例,可以解决这个问题。

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

class RandomClass { }
let x = RandomClass()

10-08 05:31