Search code examples
swiftxcodefirebasefirebase-realtime-databasenodes

Is it possible to display the 'name' of a firebase node as well as its value in Xcode?


I am trying to show User ID's in my app, however the UID's are very random and next to each one is a name, is it possible to show both the name of the nodes as well as its value?

My firebase database

enter image description here

I want to display the Name "Andy" as well as the UID "uLUnOelxABYl3lCtLz2Of5Yfnvc2"

I have set it up so that the App receives the values from my Firebase.

Here is my code:

class TestViewController: UIViewController, UITableViewDelegate, UITableViewDataSource{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return list.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
        cell?.textLabel?.text = list[indexPath.row]
        return cell!
    }


    @IBOutlet weak var tableView: UITableView!

    var ref: DatabaseReference!

    var list = [String] ()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self


        if FirebaseApp.app() == nil {
            FirebaseApp.configure() }

        ref = Database.database().reference()

        ref?.child("users").observe(.childAdded, with: { (snapshot) in

            let list1 = snapshot.value as? String
            if let actualList = list1 {
                self.list.append(actualList)

                self.tableView.reloadData()
            }
        }
     )
    }
}

Here is what I get back. However I want to show is a list of the names with these values next to it, like this (photoshop) results

PHOTOSHOP RESUTLS


Solution

  • Regarding to documentation FIRDataSnapshot has property key, so I think you can use it for matching with values, e.g:

    /// e.g. use dictionary instead of Array
    //var list = [String] ()
    var list = [AnyHashable: String]()
    ...
    
    ref?.child("users").observe(.childAdded, with: { (snapshot) in
    
            let key = snapshot.key as? Hashable
            let value = snapshot.value as? String
            if let actualValue = value, let actualKey = key {
                self.list[key] = actualValue
                self.tableView.reloadData()
            }
        }