Чтение значений из списка переключателей в SwiftUI - PullRequest
1 голос
/ 24 марта 2020

Надеюсь, этот вопрос не слишком глупый. Я застрял с этой проблемой в течение длительного времени, пробовал разные подходы, и я все еще терплю неудачу. Я довольно новичок в Swift и SwiftUI, поэтому, возможно, я не вижу очевидного.

У меня есть представление, которое содержит список переключателей. Список переключений опирается на setData, который построен из JSON -файла, который содержит id, имя и imageUrl. В этом представлении пользователь может выбрать различные наборы, чтобы начать игру с:

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"))
    }
}

Данные каждого переключения собирается в моем 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"
 }
]

. ... чтобы передать его функции для выбора игровых данных и перехода к новому виду.

Я много гуглил и не смог найти решение для сбора состояний для разных переключателей. Есть ли простой способ сделать это? Я выбрал совершенно неправильный подход? Надеюсь, кто-нибудь может помочь и направить меня sh в правильном направлении.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...