我正在尝试使用SwiftUI和绑定更新视图。我有一个观察ViewModel变化的MainView。我希望此视图响应viewModel.data.image中的更改。我不知道如何将值传递给HeaderView。
目前此代码拒绝编译。我得到一个错误:
Value of type 'ObservedObject <LockedCourseViewModel> .Wrapper' has no dynamic member 'course' using key path from root type
视图:
struct MainView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
HeaderView(image: $viewModel.data.image)
}
}
}
ViewModel:
class ViewModel: ObservableObject {
@Published var data: Model?
func fetchData(id: Int) {
// fetching some data from api
self.data = Model(data: data)
}
}
型号:
class Model: ObservableObject {
@Published var image: URL
}
标题视图:
struct HeaderView: View {
@Binding var image: URL?
}
谢谢你的帮助!
由于Model
也是一个类,所以不需要绑定,而是传递对整个模型的引用,并使用其中的图像。
var body: some View {
VStack {
// once data is fetched HeaderView will be updated
HeaderView(model: viewModel.data ?? Model())
}
}
和
struct HeaderView: View {
@ObservedObject var model: Model
// ... other code
}
更新:替换为绑定到图像
var body: some View {
let boundImage = Binding(
get: { viewModel.data?.image },
set: { viewModel.data?.image = $0 }
)
return VStack {
HeaderView(image: boundImage)
}
}