gpt4 book ai didi

SwiftUI - 使用 'ObservableObject' 和 @EnvironmentObject 有条件地显示 View

转载 作者:行者123 更新时间:2023-11-28 05:39:15 26 4
gpt4 key购买 nike

我想在我的应用程序中有条件地显示不同的 View - 如果某个 bool 值为真,将显示一个 View 。如果为假,将显示不同的 View 。此 bool 值位于 ObservableObject 类中,并从将要显示的 View 之一更改而来。

PracticeStatus.swift(父 View )

import Foundation
import SwiftUI
import Combine

class PracticeStatus: ObservableObject {
@Published var showResults:Bool = false
}

PracticeView.swift(父 View )

struct PracticeView: View {
@EnvironmentObject var practiceStatus: PracticeStatus

var body: some View {
VStack {
if practiceStatus.showResults {
ResultView()
} else {
QuestionView().environmentObject(PracticeStatus())
}
}
}
}

QuestionView.swift

struct QuestionView: View {
@EnvironmentObject var practiceStatus: PracticeStatus

var body: some View {
VStack {
...
Button(action: {
self.practiceStatus.showResults = true
}) { ... }
...
}
}
}

但是,此代码不起作用。当按下 QuestionView 中的按钮时,不会显示 ResultView。有人有解决办法吗?谢谢!

最佳答案

你试过编译你的代码吗?有几个基本错误:

  1. 变量 practicePracticeView 中不存在。您是说 practiceStatus 吗?
  2. QuestionView 中不存在变量 userData。您是说 practiceStatus 吗?
  3. 您正在从 PracticeView 内部调用 PracticeView!您肯定会遇到堆栈溢出 ;-) 您不是说 QuestionView 吗?

下面是一个工作代码:

import Foundation
import SwiftUI
import Combine

class PracticeStatus: ObservableObject {
@Published var showResults:Bool = false
}

struct ContentView: View {
@State private var flag = false

var body: some View {
PracticeView().environmentObject(PracticeStatus())
}
}

struct PracticeView: View {
@EnvironmentObject var practiceStatus: PracticeStatus

var body: some View {
VStack {
if practiceStatus.showResults {
ResultView()
} else {
QuestionView()
}
}
}
}

struct QuestionView: View {
@EnvironmentObject var practiceStatus: PracticeStatus

var body: some View {
VStack {

Button(action: {
self.practiceStatus.showResults = true
}) {
Text("button")
}
}
}
}

struct ResultView: View {
@State private var flag = false

var body: some View {
Text("RESULTS")
}
}

关于SwiftUI - 使用 'ObservableObject' 和 @EnvironmentObject 有条件地显示 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57488322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com