我的应用程序有一个按钮,可以产生绿色或红色的背景。用户按下按钮多次以生成每次的绿色或红色,并将结果记录到名为“当前会话”的Observable对象中。当前总数显示在由胶囊制成的自定义视图中。由于某种原因,视图不会更新总数并继续显示0。
我尝试为ResultsBar中的numberOfGreens添加状态绑定,但这也不起作用。它仍然每次都只显示0。环境已经添加到我的所有视图中。我尝试打印结果,结果数字在控制台中正确显示,但UI不会更新。有趣的是,在我的应用程序的其他屏幕上,trialsRemaining变量完美地工作,更新时没有任何问题。另外,在预览中,ResultsBar也完全正常。
我尝试为ResultsBar中的numberOfGreens添加状态绑定,但这也不起作用。它仍然每次都只显示0。环境已经添加到我的所有视图中。我尝试打印结果,结果数字在控制台中正确显示,但UI不会更新。有趣的是,在我的应用程序的其他屏幕上,trialsRemaining变量完美地工作,更新时没有任何问题。另外,在预览中,ResultsBar也完全正常。
class CurrentSession: ObservableObject {
@Published var trialsRemaining: Int = 100
@Published var numberOfGreens: Int = 0
@Published var numberOfReds: Int = 0
func generateGreenOrRed() {
...
if resultIsGreen {numberOfGreens += 1}
else if resultIsRed {numberOfReds += 1}
trialsRemaining -= 1
}
}
struct ResultsBar: View {
let totalBarWidth: CGFloat = UIScreen.main.bounds.width - 48
var onePercentOfTotalWidth: CGFloat { return totalBarWidth/100 }
var numberOfGreens: Int
var body: some View {
ZStack(alignment: .leading) {
Capsule()
.frame(width: totalBarWidth, height: 36)
.foregroundColor(.red)
.shadow(radius: 4)
Capsule()
.frame(width: (onePercentOfTotalWidth * CGFloat(numberOfGreens)), height: 36)
.foregroundColor(.green)
.shadow(radius: 4)
}
}
}
struct ResultsView: View {
@EnvironmentObject var session: CurrentSession
var body: some View {
VStack {
HStack {
Text("\(session.numberOfGreens)")
Spacer()
Text("\(session.numberOfReds)")
}
ResultsBar(numberOfGreens: session.numberOfGreens)
}
}
}
我正在运行的是Xcode 11.2 beta 2 (11B44),在macOS Catalina 10.15.2 Beta (19C32e)上。