В UIViewControllerRepresentable, как я могу передать значение ObservedObject в контроллер представления и обновлять его каждый раз, когда значения изменяются? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть структура 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 Ответ

1 голос
/ 31 октября 2019

updateUIViewController следует вызывать при обновлении модели представления, однако существует ошибка в SwiftUI UIViewControllerRepresentable и UIViewRepresentable, когда она не вызывается.

Существует обходной путь для этого:определение класса и создание его экземпляра внутри представляемого.

Просто добавьте следующее в chartVM, и он должен начать работать:

class RandomClass { }
let x = RandomClass()
...