Swift 3 从 Firebase 获取用户数据

Posted

技术标签:

【中文标题】Swift 3 从 Firebase 获取用户数据【英文标题】:Swift 3 Fetch User Data from Firebase 【发布时间】:2018-01-01 20:19:25 【问题描述】:

我想将 Firebase 数据库中所有用户的名字提取到表格视图单元格中。当我执行我的代码时,它不起作用。 Firebase 有用户元组。在这个元组中,我存储了所有用户的 ID。在这些 id 中,我存储了个人信息元组。名字在此个人信息中。您可以在下图中看到我的 Firebase 快照。我的代码问题在哪里?谁能帮我 ? http://prntscr.com/huvdr9

//chatInfo.swift
class ChatInfo: UITableViewController 

    let cellId = "cellId"
    var users = [User] ()

    override func viewDidLoad() 
        super.viewDidLoad()

        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Geri", style: .plain, target:self, action: #selector(handleCancel))
        tableView.register(UserCell.self, forCellReuseIdentifier: cellId)
        fetchUser()
    
    func handleCancel() 

        dismiss(animated: true, completion: nil)

    
    func fetchUser() 

        Database.database().reference().child("user").observe(.childAdded, with: (snapshot) in

            if let dictionary = snapshot.value as? [String: AnyObject] 

                let user = User()

                user.userId = dictionary["firstname"] as! String
                print(user.firstname)
                self.users.append(user)

                DispatchQueue.main.async(execute: 
                    self.tableView.reloadData()
                )
            

         , withCancel: nil)
    
    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return users.count
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

        // let cell = UITableViewCell(style: .subtitle, reuseIdentifier: cellId)
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
        let user = users[indexPath.row]
        cell.detailTextLabel?.text = user.firstname
        cell.imageView?.image = UIImage(named: "mail")
        return cell
    
    class UserCell: UITableViewCell 

        override init(style: UITableViewCellStyle, reuseIdentifier: String?) 
            super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
        
        required init?(coder aDecoder: NSCoder) 
            fatalError("not implemented")
        
    


//user.swift
class User: NSObject 

    var userId : String?
    var latitude : Double?
    var longitude : Double?
    var firstname : String?
    var email : String? 

【问题讨论】:

【参考方案1】:

您需要为在线用户添加一个孩子:

Database.database().reference().child("user").observe(.childAdded, with: (snapshot) in

改成这样:

Database.database().reference().child("user").child("personalInfo").observe(.childAdded, with: (snapshot) in

【讨论】:

以上是关于Swift 3 从 Firebase 获取用户数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3.1 - .setValuesForKeys和Firebase无法检索用户

使用 Swift 从带有条件的 Firebase 数据库中获取数据

在 Swift 3 中包含字典的 Firebase 进程子快照

从当前用户 firebase swift 获取文档

使用swift 3如何从firebase中检索另一个数据中的数据[关闭]

从 firebase 获取数据到 UITableViewController - swift