ios - 在 UIViewControllerRepresentable 中,如何将 ObservedObject 的值传递给 View Controller 并在每次值更改时更新它?

标签 ios swift swiftui combine observableobject

我有一个订阅了 ObservableObjectUIViewControllerRepresentable 结构,如下所示:

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()

关于ios - 在 UIViewControllerRepresentable 中,如何将 ObservedObject 的值传递给 View Controller 并在每次值更改时更新它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58635048/

相关文章:

ios - 天数倒计时 iOS swift

ios - 使用 NSPredicate 过滤对象

ios - 使用 KVO 快速观察 view.center for ios 返回 NSPoint?

SwiftUI AspectRatio 不适用于来自相机的图像

swift - 如何将 @State 与字典一起使用

SwiftUI 居中对齐 View ,除非另一个 View "pushes"将其向上

ios - 我在 xcode 中更改了我的应用程序的显示名称,它不再运行而不会崩溃

iphone - 从 iPhone 应用程序通过 WIFI 将文件导出到计算机 -

ios - FaSTLane 在运行 UI 测试时扫描 "Failed to synthesize event",在 Xcode 中运行

ios - 在 iOS 中显示 UIToolBar