gpt4 book ai didi

swift - 如何在 SwiftUI 的应用程序文件中使用 EnvironmentObject

转载 作者:行者123 更新时间:2023-12-04 07:54:10 30 4
gpt4 key购买 nike

是否可以在新的 SwiftUI 2.0 项目的应用程序文件中使用 EnvironmentObject?
我正在使用以下代码,但出现错误:

Fatal error: No ObservableObject of type Authentication found. AView.environmentObject(_:) for Authentication may be missing as anancestor of this view.: file SwiftUI, line 0

我假设这个错误是因为我还没有在任何 View 中使用 .environmentObject 修饰符,所以 UserAuth 还没有被放置在环境中。

但我希望此 loginStatus 在我的应用程序中的任何位置都可用,并且能够在我的应用程序中的任何位置在 UserAuth 类的一个常见实例上使用函数 getLoginStatus。

我希望将它放在我的 rootView 中并让它应用于所有 View ,但不确定如何使用我的应用程序文件中的以下结构来做到这一点。

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
}
}

最佳答案

您可以将它用作该级别的常规属性,并在需要时作为环境向下传递到 View 层次结构中,例如

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")
}
}
}
}

关于swift - 如何在 SwiftUI 的应用程序文件中使用 EnvironmentObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66794659/

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