Great, that's kind of what I was expecting. So a shared ViewModel like in the implementation below is the recommended way to marshal data between an NSViewController and a SwiftUI View?
import AppKit
import SwiftUI
final class ViewModel: ObservableObject {
@Published var details: String = ""
}
struct DetailsView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
Text(viewModel.details)
}
}
final class ViewController: NSViewController {
private let viewModel: ViewModel
init() {
self.viewModel = ViewModel()
super.init(nibName: nil, bundle: nil)
}
override func viewDidLoad() {
let detailsView = DetailsView(viewModel: viewModel)
view.addSubview(NSHostingView(rootView:detailsView))
}
func updateDetails(_ details: String) {
viewModel.details = details
}
}
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: