首页 > 解决方案 > 传递 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]
    }
}

标签: swiftfirebasefirebase-realtime-database

解决方案


我可以看到userArray是一个用户数组,因此您不能使用,因为该数组在其定义userArray.ref中没有任何属性。ref在表格视图中,它正在工作,因为您拉出了一个user对象,然后传递了ref.

在传递给来宾视图控制器之前尝试获取选定的用户实例。

let user =  userArray[selected user index];
guestVC.ref = user.ref

推荐阅读