У вас есть несколько экземпляров ViewRouter
, причем каждое представление имеет свой собственный экземпляр. Если вы измените этот экземпляр, другие экземпляры не изменятся.
Чтобы решить эту проблему, вам нужно либо передать один экземпляр вручную:
struct MultiButton {
@ObservedObject var viewRouter: ViewRouter
...
}
struct ContentView {
@ObservedObject var viewRouter = ViewRouter()
var body: some View {
VStack {
MultiButton(viewRouter: self.viewRouter)
...
}
}
}
Или вы можете объявить его как объект среды:
struct MultiButton {
@EnvironmentObject var viewRouter: ViewRouter
...
}
А затем введите его, например, при создании иерархии представлений в делегате сцены:
let contentView = ContentView()
.environmentObject(ViewRouter())
Обратите внимание, что при внедрении объекта среды в делегат сцены , он не будет доступен в каждом предварительном просмотре представления, использующего ViewRouter, если вы не добавите его туда вручную:
static var previews: some View {
ContentView()
.environmentObject(ViewRouter())
}