Man*_*ner 2 firebase swift google-cloud-firestore swiftui
我正在创建一个 SwiftUI 应用程序,其中包含 Firebase 来启用帐户登录,非常简单。但是当我运行此代码时,出现以下错误“SwiftUI 线程 1:致命错误:找不到 SessionStore 类型的 ObservableObject ”。调用session.session时弹出,你能告诉我这段代码错误在哪里吗?多谢你们
import UIKit
import SwiftUI
import Firebase
import Combine
struct ContentView: View {
@EnvironmentObject var session: SessionStore
func getUser () {
session.listen()
}
var body: some View{
VStack {
if session.session != nil {
LoginView()
}
else{
TabView {
ProfilView()
.tabItem {
Label("Profil", systemImage: "person")
}
NotificationsView()
.tabItem {
Label("Notifications", systemImage: "bell")
}
}
}
}
.onAppear(perform: getUser)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView().environmentObject(SessionStore())
}
}
Run Code Online (Sandbox Code Playgroud)
这里是 SessionStore 模型:
import Combine
import Foundation
import Firebase
final class User {
@Published var uid: String
// var email: String?
@Published var displayName: String?
init(uid: String, displayName: String?) {
self.uid = uid
// self.email = email
self.displayName = displayName
}
}
final class SessionStore: ObservableObject {
@Published var session: User?
@Published var handle: AuthStateDidChangeListenerHandle?
func listen () {
// monitor authentication changes using firebase
handle = Auth.auth().addStateDidChangeListener { (auth, user) in
if let user = user {
// if we have a user, create a new user model
print("Got user: \(user)")
self.session = User(
uid: user.uid,
displayName: user.displayName
)
} else {
// if we don't have a user, set our session to nil
self.session = nil
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您需要.environmentObject(SessionStore())
在实例化的地方包含ContentView
:
ContentView().environmentObject(SessionStore())
Run Code Online (Sandbox Code Playgroud)
这需要在使用的任何地方发生ContentView
(例如在预览和实际应用程序层次结构本身中,例如来自SceneDelegate
或WindowGroup
如果您正在使用 SwiftUI 视图生命周期)。
归档时间: |
|
查看次数: |
2300 次 |
最近记录: |