我有这个navigationStack它有许多NavigationLinks到游戏菜单的用户可以选择游戏玩。这个菜单由导航链接以及导致某种类型的游戏。游戏菜单看起来像这样:
struct GameMenuView: View {
@Environment(\.presentationMode) var mode: Binding<PresentationMode>
var body: some View {
VStack{
ButtonGame(game_name: "Title", view: AnyView(GameScreen(game: NewGame(count: 4, category: "All"))))
ButtonGame(game_name: "Title", view: AnyView(GameScreen(game: NewGame(count: 6, category: "2"))))
ButtonGame(game_name: "Title", view: AnyView(GameScreen(game: NewGame(count: 4, category: "None"))))
ButtonGame(game_name: "Title", view: AnyView(GameScreen(game: NewGame(count: 4, category: "Basic"))))
}
}
}
ButtonGame只是一个结构体,它接受NavigationLink应该指向的视图。游戏屏幕的视图接受NewGame类,该类处理所有的游戏逻辑和统计数据。这一切都工作正常。但是我发现每次我从主菜单导航到游戏菜单时,所有这4个NewGame类都被初始化,并且当从GameMenu导航到实际的GameView时,所有NewGame类都被初始化再来一次。当我从游戏视图导航回游戏菜单视图时也会发生同样的事情。
这会导致不必要的数据加载,也会导致每次你离开游戏视图时游戏都会丢失状态。如何才能最好地处理这个问题?这样特定的游戏只有在按下按钮时才会初始化,并且当导航回游戏菜单时不会导致所有内容再次重新加载?
1条答案
按热度按时间zpjtge221#
在Swift(和SwiftUI)中,我们使用structs而不是类来处理模型数据。数据总是事先准备好的,存储在
@State
中,然后body
使用数据来创建视图。因此,只需将Game
更改为如下的structs: