0

我有一个视图 (view1) 来显示不同的数据,我希望该视图根据另一个变量进行更改。

struct View1: View {

let array = myFunc()

var body: some View {
        
    VStack {
    
       Text("\(settings.score)")
            List {
            ForEach(0..<array.count) { section in
        
            NavigationLink(destination: RowDetailView(array: array[section])) {

            RowView(array: array[section])
            }
            }
}
        }

在另一个视图中,我建立了一个 Observable 对象:

class GameSettings: ObservableObject {
@Published var score = 1
}

在其他观点中,这一切都很好。我可以根据需要更新它。

我有一个函数来获取数组变量,我希望它根据“分数”的当前值返回一个不同的数组。

func myFunc() -> [arrayModel] {
@StateObject var settings = GameSettings()

if settings.score == 1 {
var array = [ arrayModel(example: example) ]
return array
}
else if settings.score == 2 {
var array = [ arrayModel(example: example) ]
return array
}
}

这似乎不起作用。我已经尝试了各种调整版本,但找不到如何正确实现它。任何帮助将不胜感激。

4

1 回答 1

0

如果问题settings.score不是当前in myFunc,并且myFunc在 SwiftUI 视图中,您可以执行以下操作:

  1. 更改@StateObject var settings = GameSettings()@EnvironmentObject var settings: GameSettings,并将其移到外面 myFunc
  2. 在您的SceneDelegate中,存储对 的引用GameSettings(),如下所示static var gameSettings = GameSettings()
  3. 在您SceneDelegatescene(_:willConnectTo:options:)函数中,ObservedObject通过使用.environmentObject修饰符向您的视图提供 ,并传入您在步骤#2 中存储的变量,如下所示:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        let contentView = ContentView()

        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView.environmentObject(SceneDelegate.gameSettings))
            self.window = window
            window.makeKeyAndVisible()
        }
    }
于 2021-05-11T21:40:20.360 回答