Я немного новичок в SWIFT и сейчас сталкиваюсь с проблемой с пользовательским интерфейсом. Позвольте мне попытаться объяснить мою проблему.
Данные моего домашнего экрана поступают из веб-службы с использованием объекта Observable, и он загружает данные в первый раз. Но когда я пытался открыть свои левые боковые слайд-меню, тогда данные homeservice / obervable object homeView просто очищаются при открытии левого слайд-меню. Почему данные моего наблюдаемого объекта пусты. Позвольте мне поделиться своим кодом:
1 .------ Это мой основной / parentView
struct ContentView: View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
let drag = DragGesture()
.onEnded {
if $0.translation.width < -100 {
withAnimation {
self.viewRouter.showSlideOutMenu = false
self.viewRouter.showDepartmentsMenu = false
self.viewRouter.showAccountMenu = false
}
}
}
return GeometryReader { g in
ZStack(alignment: .leading) {
RouteChanger(viewRouter: self._viewRouter)
if self.viewRouter.showSlideOutMenu {
MainMenuView(viewRouter: self._viewRouter)
.frame(width: g.size.width/2)
.transition(.move(edge: .leading))
}
}
.gesture(drag)
}
}
}
2 .----- Это мое представление RouteChanger для навигации на разные страницы моих просмотров.
struct RouteChanger: View {
@EnvironmentObject var viewRouter: ViewRouter
var body: some View {
GeometryReader { g in
VStack {
if self.viewRouter.currentPage == "Home" {
HomeView()
//.modifier(PageSwitchModifier())
}
}
}
}
}
3 .... Это мой homeView, где я использую Observable Object
struct HomeView: View {
@ObservedObject var homeController = HomeController()
var body: some View {
GeometryReader { g in
ZStack {
Color(UIColor.midTown.blue)
.edgesIgnoringSafeArea(.top)
VStack { //whole body
if self.homeController.homePageData.CODE == "0" {
ImageViewWidget(imageUrl: (self.homeController.homePageData.DATA?.headerList[0].img_url)!)
.frame(minWidth: g.size.width, maxWidth: g.size.width, minHeight: (g.size.width * UIImage(named: "header")!.size.height) / UIImage(named: "header")!.size.width, maxHeight: (g.size.width * UIImage(named: "header")!.size.height) / UIImage(named: "header")!.size.width)
}
else {
Text("Loading...")
.foregroundColor(Color.blue)
.padding()
.frame(width: g.size.width)
}
}
}
}
}
}