【发布时间】:2021-02-22 19:21:59
【问题描述】:
我正在创建一个包含 Firebase 的 SwiftUI 应用程序来启用登录帐户,非常简单。但是当我运行此代码时,出现以下错误“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())
}
}
这里是 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
}
}
}
}
【问题讨论】:
-
您需要将 SessionStore 添加为 EnvironmentObject。
-
显示你在哪里初始化
ContentView()——它需要有.environmentObject()和会话存储 -
谢谢@jnpdx ????????????
-
@jnpdx 看来您的信息解决了问题,请将其发布为答案。
标签: swift firebase google-cloud-firestore swiftui