【发布时间】:2018-01-24 14:24:30
【问题描述】:
//Just a struct to save information about the User
var user = AppUser()
override func viewDidLoad() {
super.viewDidLoad()
//Verify if user is logged in
verifyUser()
user.email = "blabla"
print("viewdidload user: \(user)")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
print("viewdidappear user: \(user)")
}
func verifyUser() {
print("verify user called")
//Log in verification
guard let userID = Auth.auth().currentUser?.uid else {
perform(#selector(handleLogOut), with: nil, afterDelay: 0)
print("nil user")
return
}
ref.child("users").child(userID).observeSingleEvent(of: .value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject] {
self.user = AppUser(dictionary: dictionary)
print(self.user)
}
}) { (error) in
print(error.localizedDescription)
}
}
控制台:
verify user called
viewdidload user: AppUser(id: nil, name: nil, email:
Optional("blabla"), completedRegister: nil, FULLUser: nil)
viewdidappear user: AppUser(id: nil, name: nil, email:
Optional("blabla"), completedRegister: nil, FULLUser: nil)
AppUser(id: nil, name: nil, email: Optional("x@gmail.com"),
completedRegister: Optional(false), FULLUser: Optional(false))
问题很简单。有人可以解释一下"print("viewDidLoad user:....")" 怎么可能在“验证用户调用”和“用户”之间打印出数据库信息?
问题是当我尝试在 viewDidLoad 上获取用户信息时,该函数由于某种原因没有获取信息,因此值仍然为零。是时间问题吗?
我试图在函数 verifyUser() 之后放置一个循环,但它永远不会得到 p>
out:
while user.email == nil {
print("Waiting...")
}
所以……这就是问题
谢谢!
为 Anas Menhar 编辑 这是我的结构。为什么成为 NSObject 会更好? 我做了一个 Struct 因为我可以做两个不同的初始化(一个是空的),而 NsObject 出于某种原因不允许我
struct AppUser {
var id: String?
var name: String?
var email: String?
var completedRegister: Bool?
var FULLUser: Bool?
init(dictionary: [String: Any]) {
self.id = dictionary["id"] as? String
self.name = dictionary["name"] as? String
self.email = dictionary["email"] as? String
self.completedRegister = Bool((dictionary["completedRegister"] as? String)!)
self.FULLUser = Bool((dictionary["FULLUser"] as? String)!)
}
init() {
self.id = nil
self.name = nil
self.email = nil
self.completedRegister = nil
self.FULLUser = nil
}
}
为 Hitesh 编辑
如果我打印字典,它会在用户完成信息的同时打印。一切都结束了。
【问题讨论】:
-
您打印了
let dictionary = snapshot.value吗?你可以添加这个吗? -
向我展示你的 AppUser 模式类,它必须类似于 class User: NSObject { var id: String?变量名称:字符串? var 电子邮件:字符串? var imageURL:字符串?并且也使用这一行 user.setValuesForKeys(dictionary)
标签: swift firebase firebase-realtime-database