![](/img/trans.png)
[英]SwiftUI Fatal error: No ObservableObject of type " " found and @EnvironmentObject error: may be missing as an ancestor of this view
[英]SwiftUI - Using 'ObservableObject' and @EnvironmentObject to Conditionally Display View
我想在我的應用程序中有條件地顯示不同的視圖 - 如果某個布爾值為真,則將顯示一個視圖。 如果為 false,將顯示不同的視圖。 此布爾值位於 ObservableObject 類中,並且從將顯示的視圖之一更改。
PracticeStatus.swift(父視圖)
import Foundation
import SwiftUI
import Combine
class PracticeStatus: ObservableObject {
@Published var showResults:Bool = false
}
PracticeView.swift(父視圖)
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。 有人有解決方案嗎? 謝謝!
你試過編譯你的代碼嗎? 有幾個基本錯誤:
PracticeView
中不存在變量practice
。 你的意思是practiceStatus
嗎?QuestionView
中不存在變量userData
。 你的意思是practiceStatus
嗎?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")
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.