SwiftUI将@Published视图模型对象值传递给@Binding



我正在尝试使用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)
}
}

最新更新