Я экспериментировал с SwiftUI и UIKit, пытаясь понять, как данные распределяются между двумя платформами, и я создал простой пример для более крупного проекта, над которым я работаю. Примером является одно представление SwiftUI, которое содержит UIViewControllerRepresentatable, оборачивающий пользовательский контроллер представления. Я пытаюсь, чтобы представление SwiftUI отображало значение одного из свойств контроллера представления, но оно не правильно обновляет sh при изменении значения.
struct ContentView: View {
@State var viewController = MyViewControllerRepresentable()
var body: some View {
VStack {
viewController
Text("super special property: \(viewController.viewController.data)")
}
}
}
class MyViewController: UIViewController, ObservableObject {
@Published var data = 3
override func viewDidLoad() {
let button = UIButton(type: .system)
button.setTitle("Increase by 1", for: .normal)
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
view = button
}
@objc func buttonPressed() {
data += 1
}
}
struct MyViewControllerRepresentable: UIViewControllerRepresentable {
@ObservedObject var viewController = MyViewController()
func makeUIViewController(context: Context) -> UIViewController {
return self.viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {}
}
Когда я запускаю приложение и нажмите кнопку, я вижу, что фактическое значение data
меняется, и издатель в MyViewController
срабатывает, но значение, отображаемое на экране, не обновляется, чтобы отразить это.
Пожалуйста, обратите внимание, я очень новичок в iOS разработке, и это, вероятно, нетрадиционная модель данных. Однако я не понимаю, почему это не должно работать правильно. Буду весьма признателен за предложения о лучшем способе обмена данными, но я бы прежде всего хотел узнать, возможно ли добиться этого с его текущей структурой данных.
Заранее спасибо.