从SwiftUI中的切换列表中读取值

从SwiftUI中的切换列表中读取值,swift,list,swiftui,toggle,Swift,List,Swiftui,Toggle,我希望这个问题不要太愚蠢。我被这个问题困扰了很长一段时间,尝试了不同的方法,但仍然失败。我对Swift和SwiftUI还很陌生,这就是为什么我可能看不到显而易见的东西 我有一个包含切换列表的视图。切换列表依赖于setData,它是从包含id、名称和imageUrl的JSON文件构建的。在该视图中,用户可以选择不同的组来开始游戏: import SwiftUI struct GameGenerationView: View { var body: some View {

我希望这个问题不要太愚蠢。我被这个问题困扰了很长一段时间,尝试了不同的方法,但仍然失败。我对Swift和SwiftUI还很陌生,这就是为什么我可能看不到显而易见的东西

我有一个包含切换列表的视图。切换列表依赖于
setData
,它是从包含id、名称和imageUrl的JSON文件构建的。在该视图中,用户可以选择不同的组来开始游戏:

import SwiftUI

struct GameGenerationView: View {
    var body: some View {
        VStack {
            List(setData, id: \.id) { set in
                GameGenerationRow(set: set, store: SetSelectionStore(id: set.id, name: set.name))

            }
            Button(action: {
                print("results")

            }) {
                Text("Spiel starten")
            }
        }
        .navigationBarTitle("Spielgenerator", displayMode: .inline)
    }
}

struct GameGenerationView_Previews: PreviewProvider {
    static var previews: some View {
        GameGenerationView()
    }
}
其次是实际的切换
GameGenerationRow

import SwiftUI

struct GameGenerationRow: View {
    var set: CardSet
    @ObservedObject var store: SetSelectionStore

    var body: some View {
        HStack {
            Toggle(isOn: $store.selection) {
                Spacer()
                Text(set.name)
                    .fontWeight(.bold)
            }
            .frame(height: 35)
        }
    }

}

struct GameGenerationRow_Previews: PreviewProvider {
    static var previews: some View {
        GameGenerationRow(set: setData[0], store: SetSelectionStore(id: 1, name: "test"))
    }
}
每个切换的数据都收集在my
SetSelectionStore
中:

import SwiftUI
import Combine

final class SetSelectionStore: ObservableObject {
    var id: Int
    var name: String
    @Published var selection: Bool = false

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    func returnStore() -> [String:Any] {
        return [
            "id": self.id,
            "name": self.name,
            "selection": self.selection
        ]
    }
}
按下
GameGenerationView
中的按钮后,我想从如下切换中收集状态

[
 {
   name: "Set1"
   usedForGame: 0
 },
 {
   name: "Set2"
   useForGame: "1"
 }
]
。。。以便将其传递给一个函数,以选择游戏数据并导航到新视图

我在谷歌上搜索了很多次,但没有找到一个解决方案来收集不同开关的状态。有没有一个简单的方法?我选择了一个完全错误的方法吗?希望有人能帮助我,把我推向正确的方向


谢谢大家!

我已经取得了一些进展,添加了一个
ObervableObject
作为每个切换的数据存储,并在遍历setData数组时将其传递到每一行。不幸的是,我无法将
SetSelectionStore
设置为
@Observed var
,因为这在迭代时是不可能的。按下按钮时如何收集每个切换的
SetSelectionStore
对象?我遇到了类似的问题,尽管我的问题在别处。我认为您的设置很简单:您的SetSelectionStore需要位于GameGenerationRow中的绑定中,并且必须是GameGenerationView中的状态,否则GameGenerationView无法知道它。您正在尝试动态创建它,但您没有将其存储在任何位置。