swift - 传递 Firebase 数据库参考数据
问题描述
我正在寻找一个数组,其中包含从 Firebase 提取的用户信息,使用 segue 从一个控制器到另一个控制器。当一切都在表格视图中时,我能够做到这一点,但在常规控制器视图中时却不行。有人可以帮忙吗?
视图控制器
var userArray = [User]()
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showGuestView" {
let guestVC = segue.destination as! GuestUserViewController
guestVC.ref = userArray.ref //this would work using userArray[indexPath.row].ref if it was a tableview
//ref represents DatabaseReference?
}
}
DatabaseClass.fetchUser() { (user) in
if let user = user {
self.userArray.append(user)
}
数据库类
func fetchUser(completion: @escaping (User?)->()){
let currentUser = Auth.auth().currentUser!
let postRef = Database.database().reference().child("getinfo").child(currentUser.uid)
postRef.observe(.value, with: { (snapshot) in
for childSnapshot in snapshot.children.allObjects as! [DataSnapshot] {
let request = childSnapshot.key
let userRef = self.databaseRef.child("users").child(request)
userRef.observeSingleEvent(of: .value, with: { (currentUser) in
let user: User = User(snapshot: currentUser)
completion(user)
})
}
})
}
用户结构
struct User {
var firstname: String!
var uid: String!
var ref: DatabaseReference!
init(firstname: String, uid: String){
self.firstname = firstname
self.uid = uid
self.ref = Database.database().reference()
}
init(snapshot: DataSnapshot){
if let snap = snapshot.value as? [String:Any] {
self.firstname = snap["firstname"] as! String
self.uid = snap["uid"] as! String
}
self.ref = snapshot.ref
}
func toAnyObject() -> [String: Any]{
return ["firstname":self.firstname, "uid":self.uid]
}
}
解决方案
我可以看到userArray
是一个用户数组,因此您不能使用,因为该数组在其定义userArray.ref
中没有任何属性。ref
在表格视图中,它正在工作,因为您拉出了一个user
对象,然后传递了ref
.
在传递给来宾视图控制器之前尝试获取选定的用户实例。
let user = userArray[selected user index];
guestVC.ref = user.ref
推荐阅读
- machine-learning - 多CPU如何mlxtend StackingRegressor?
- python - 您如何对应 2 个列表中的索引?
- php - 在 Symfony 4 单元测试中验证命令独白输出
- ruby-on-rails - Rails Ajax 问题
- ionic-framework - Ionic Native:ZeroConf 无法在 IOS 上运行
- react-admin - 访问反应组件之外的全局存储?
- java - 我可以在我的应用程序中使用 .obb 文件,即使它低于 50 mb?
- android - Android Studio,运行App时出现2个模拟器问题
- neo4j - 在嵌套对象中查询
- java - 将 JavaFX 与 Intellij IDEA 结合使用