SWIFTUI - 如何在测验应用程序中保持分数,并在单独的视图上提出问题?



新手在这里。我正在创建一个测验应用程序。与大多数示例不同,每个问题都在单独的视图中。我想保留分数并在最后显示它。

例:

struct questionOne: View {
    @State var isSelected = false
    var body: some View {
       GeometryReader { geometryProxy in
        VStack(alignment: .center) {
            TRpic().cornerRadius(10)
            Text("What's the capital of Turkey?")
                .font(.title)
            Spacer()
           Button(action: {self.isSelected.toggle()}) {
               Text("Istanbul")
           } .buttonStyle(SelectedButtonStyleFalse(isSelected: self.$isSelected))
           Button(action: {self.isSelected.toggle()}) {
                Text("Ankara")
            }.buttonStyle(SelectedButtonStyle(isSelected: self.$isSelected))
           Button(action: {self.isSelected.toggle()}) {
                Text("Athens")
            } .buttonStyle(SelectedButtonStyleFalse(isSelected: self.$isSelected))
             Spacer()
            NavigationLink(destination: questionTwo()) {
              VStack {
                Text("Next Question")
               Adview().frame(width: 150, height: 50)
             }
          }
       }
    }
  }
}

struct SelectedButtonStyle: ButtonStyle {
    @Binding var isSelected: Bool
    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .padding(20)
            .foregroundColor(.white)
            .background(isSelected ? Color.green : Color.gray)
            .cornerRadius(10.0)
    }
}

struct SelectedButtonStyleFalse: ButtonStyle {
    @Binding var isSelected: Bool
    public func makeBody(configuration: Self.Configuration) -> some View {
        configuration.label
            .padding(20)
            .foregroundColor(.white)
            .background(isSelected ? Color.red : Color.gray)
            .cornerRadius(10.0)
    }
}

我有两种按钮样式:SelectedButtonStyle(用于正确答案(和 SelectedButtonStyleFalse(用于错误答案(

所有 50 个问题(视图(都通过导航视图连接。最后,我想在单独的视图中显示总分。例如"您已获得 35/50 分"。

谢谢!

您可以使用@EnvironmentObject . 你所要做的就是创建一个这样的类:

import Foundation
class GameStatus: ObservableObject {
    @Published var score: Int = 0
}

然后在结构中添加@EnvironmentObject var gameStatus: GameStatus

最后,您需要触发分数更新,只需做

self.gameStatus.answers += 1

查看执行相同工作的三种方法,以获取有关如何在视图之间共享数据的 3 个示例。

最新更新