如何在 SwiftUI 的应用程序文件中使用 EnvironmentObject
How to use EnvironmentObject in app file in SwiftUI
是否可以在新的 SwiftUI 2.0 项目的应用程序文件中使用 EnvironmentObject?
我正在使用以下代码,但出现错误:
Fatal error: No ObservableObject of type Authentication found. A
View.environmentObject(_:) for Authentication may be missing as an
ancestor of this view.: file SwiftUI, line 0
我假设这个错误是因为我还没有在任何视图中使用 .environmentObject 修饰符,所以 UserAuth 还没有被放置在环境中。
但我希望此 loginStatus 在我的应用程序中的任何位置都可用,并且能够在我的应用程序中的任何位置在 UserAuth Class.
的一个常见实例上使用函数 getLoginStatus
我希望将它放在我的 rootView 中并将其应用于所有视图,但不确定如何使用我的应用程序文件中的以下结构来执行此操作。
enum LoginStatus {
case signedIn
case signedOut
}
import SwiftUI
@main
struct ExampleApp: App {
@EnvironmentObject var userAuth: UserAuth
init() {
userAuth.getLoginStatus()
}
var body: some Scene {
WindowGroup {
switch userAuth.loginStatus {
case .signedIn:
Text("Signed In")
case .signedOut:
Text("Signed Out")
}
}
}
}
import SwiftUI
class UserAuth: ObservableObject {
@Published var loginStatus: LoginStatus = .undetermined
func getLoginStatus() {
// asynchrounously set loginStatus
}
}
您可以在该级别作为常规 属性 使用它,并作为环境向下传递到需要的视图层次结构 if/when,例如
struct ExampleApp: App {
let userAuth = UserAuth() // << here !!
var body: some Scene {
WindowGroup {
switch userAuth.loginStatus {
case .signedIn:
ContentView()
.environmentObject(userAuth) // << here !!
case .signedOut:
Text("Signed Out")
}
}
}
}
您需要从根视图注入 UserAuth,并使用 @EnvironmentObject
属性.
在 View
中访问您的对象
import SwiftUI
@main
struct ExampleApp: App {
var body: some Scene {
WindowGroup {
MainView().environmentObject(UserAuth())
}
}
}
class UserAuth: ObservableObject {
@Published var loginStatus: LoginStatus = .undetermined
func getLoginStatus() {
// asynchrounously set loginStatus
}
enum LoginStatus {
case undetermined
}
}
struct MainView:View{
var body: some View{
Text("")
}
}
struct MainView1:View{
@EnvironmentObject var userAuth: UserAuth
var body: some View{
Text("")
}
}
是否可以在新的 SwiftUI 2.0 项目的应用程序文件中使用 EnvironmentObject?
我正在使用以下代码,但出现错误:
Fatal error: No ObservableObject of type Authentication found. A View.environmentObject(_:) for Authentication may be missing as an ancestor of this view.: file SwiftUI, line 0
我假设这个错误是因为我还没有在任何视图中使用 .environmentObject 修饰符,所以 UserAuth 还没有被放置在环境中。
但我希望此 loginStatus 在我的应用程序中的任何位置都可用,并且能够在我的应用程序中的任何位置在 UserAuth Class.
的一个常见实例上使用函数 getLoginStatus我希望将它放在我的 rootView 中并将其应用于所有视图,但不确定如何使用我的应用程序文件中的以下结构来执行此操作。
enum LoginStatus {
case signedIn
case signedOut
}
import SwiftUI
@main
struct ExampleApp: App {
@EnvironmentObject var userAuth: UserAuth
init() {
userAuth.getLoginStatus()
}
var body: some Scene {
WindowGroup {
switch userAuth.loginStatus {
case .signedIn:
Text("Signed In")
case .signedOut:
Text("Signed Out")
}
}
}
}
import SwiftUI
class UserAuth: ObservableObject {
@Published var loginStatus: LoginStatus = .undetermined
func getLoginStatus() {
// asynchrounously set loginStatus
}
}
您可以在该级别作为常规 属性 使用它,并作为环境向下传递到需要的视图层次结构 if/when,例如
struct ExampleApp: App {
let userAuth = UserAuth() // << here !!
var body: some Scene {
WindowGroup {
switch userAuth.loginStatus {
case .signedIn:
ContentView()
.environmentObject(userAuth) // << here !!
case .signedOut:
Text("Signed Out")
}
}
}
}
您需要从根视图注入 UserAuth,并使用 @EnvironmentObject
属性.
View
中访问您的对象
import SwiftUI
@main
struct ExampleApp: App {
var body: some Scene {
WindowGroup {
MainView().environmentObject(UserAuth())
}
}
}
class UserAuth: ObservableObject {
@Published var loginStatus: LoginStatus = .undetermined
func getLoginStatus() {
// asynchrounously set loginStatus
}
enum LoginStatus {
case undetermined
}
}
struct MainView:View{
var body: some View{
Text("")
}
}
struct MainView1:View{
@EnvironmentObject var userAuth: UserAuth
var body: some View{
Text("")
}
}