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