I have a @Published parameter in my viewmodel like here:
struct TestView: View {
let viewModel: ViewModel
var body: some View {
Text("aaa")
.overlay(Color.clear.modifier(GeometryGetter(rect: viewModel.rect)))
}
}
extension TestView {
class ViewModel {
@Published var rect: CGRect = .zero
}
}
I want to connect this parameter to an inner view, so I thought I'd use @Binding like here:
public struct GeometryGetter: ViewModifier {
@Binding var rect: CGRect
public init(rect: Binding<CGRect>) {
self._rect = rect
}
public func body(content: Content) -> some View {
return GeometryReader { proxy -> Color in
DispatchQueue.main.async {
self.rect = proxy.frame(in: .global)
}
return Color.clear
}
}
}
But I'm getting an error:
Cannot convert value of type 'Published<CGRect>.Publisher' to expected argument type 'Binding<CGRect>'
What is the correct way to implement it?