Recupere todo el valor secundario a una label en la celda de vista de tabla

Quiero recuperar todos los valores secundarios de "Cake" para pastelear la label de la tarifa.
Estoy intentando recuperar, pero no puedo arreglar el código correctamente y también soy el nivel de input a ios.

Estructura de la Firebase

introduzca la descripción de la imagen aquí

ViewController

introduzca la descripción de la imagen aquí

TestTableViewCell

import UIKit class TestTableViewCell: UITableViewCell { @IBOutlet weak var cakeImage: UIImageView! @IBOutlet weak var cakeEngLabs: UILabel! @IBOutlet weak var cakeUrLabs: UILabel! @IBOutlet weak var cakeRateLabs: UILabel! } 

* TestTableViewController **

 import UIKit import Firebase class TestTableViewController: UITableViewController { @IBOutlet var cakeTableView: UITableView! var ref = FIRDatabase.database().reference() struct Cake { let cakeEngNames: String let cakeUrNames: String let cakeImages: UIImage var cakeRates: String } var cakes = [Cake(cakeEngNames: "almond Cake", cakeUrNames: "badam cake", cakeImages: UIImage(named:"Maru")!, cakeRates: ""), Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: ""), Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: ""), Cake(cakeEngNames: "Jelly Cake", cakeUrNames: "jeli ka cake", cakeImages: UIImage(named:"spices")!, cakeRates: "")] override func viewDidLoad() { super.viewDidLoad() let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") AlmondSnap.observe( .value, with: { (snapshot) in let almondRate = snapshot.value as! String self.cakes[].cakeRates = almondRate print("\(almondRate)") self.tableView.reloadData() }) } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return self.cakes.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCell(withIdentifier: "TestTableViewCell", for: indexPath) as! TestTableViewCell cell.cakeImage.image = self.cakes[indexPath.row].cakeImages cell.cakeEngLabs.text = self.cakes[indexPath.row].cakeEngNames cell.cakeUrLabs.text = self.cakes[indexPath.row].cakeUrNames cell.cakeRateLabs.text = self.cakes[indexPath.row].cakeRates return cell } } 

Entonces, según los comentarios, como dijiste que solo necesitas cakename y su tasa para completar la tabla. Por otro lado, eso es estático (si no, por favor, busque una estructura y la respuesta sugerida por @dstepan). Así es como puede llenar sus datos en tableview.

  var cakes = [Cake]() override func viewDidLoad() { super.viewDidLoad() let almondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") almondSnap.observe( .value, with: { (snapshot) in if snapshot.hasChildren(){ for snap in snapshot.children { // snap.key produces name of cake // snap.value produces rate of cake if let node = snap as? FIRDataSnapshot, let rate = node.value as? Int { self.cakes.append(Cake(cakeEngNames: node.key, cakeUrNames: "badam cake", cakeImages: UIImage(named:"Maru")!, cakeRates: String(rate))) } } self.cakeTableView.reloadData() } }) } 

Como está actualmente construido, podría acceder a su nodo Cake como a continuación:

 var cakes: [Cake] = [] override func viewDidLoad() { super.viewDidLoad() let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") AlmondSnap.observe( .value, with: { (snapshot) in for item in snapshot.children { if let cakeFromDatabase = item as? FIRDataSnapshot { let cake = Cake() cake.cakeRates = cakeFromDatabase.value // for "Almond_Cake" this will be 800 cakes.append(cake) } } self.tableView.reloadData() }) } 

Sin embargo, probablemente podría beneficiarse de hacer un par de cambios de layout en su enfoque actual, en function de lo que estoy viendo.

Es probable que su estructura de database sea

 dgrproject-ac0e7 -- Hyderabad -- Bakery -- Cakes -- id1 -- name: Almond Cake -- rate: 800 

y así.

Luego, en su código, puede hacer lo siguiente

 var cakes: [Cake] = [] { didSet { self.tableView.reloadData() } } override func viewDidLoad() { super.viewDidLoad() let AlmondSnap = ref.child("Hyderabad").child("Bakery").child("Cake") AlmondSnap.observe( .value, with: { (snapshot) in let allCakes = [] for item in snapshot.children { if let cakeFromDatabase = item as? FIRDataSnapshot { let cake = Cake() cake.cakeEngNames = cakeFromDatabase["name"] as? String cake.cakeRates = cakeFromDatabase["rate"] as? Int allCakes.append(cake) } } cakes = allCakes }) } 

Agregar didSet a su set de pasteles ahora actualizará automáticamente la tablaView cada vez que configure cakes . Esto limpia el código un poco dentro de su manejador de finalización para la llamada a la base de fuego. También creamos una matriz allCakes para que no añadamos un nuevo object Cake a las cakes y que la vista de la tabla se vuelva a cargar potencialmente cientos de veces a medida que crezca el set de datos.

¡Espero que esto ayude!

si almacena todos los valores en NSMutableArray, use esto

 cell.cakeRateLbl.text = “Almon Cake Rate :\(self.cakesArray[0].objectForKey(“Hyderabad”).objectAtIndex(0).objectForKey(“Bakery”).ObjectAtIndex(0).objectForKey(“Cake”).objectAtIndex(0).valueForKey(“Almon_Cake”) as! Int)\nAzna Mental Cake Rate :\(self.cakesArray[0].objectForKey(“Hyderabad”).objectAtIndex(0).objectForKey(“Bakery”).ObjectAtIndex(0).objectForKey(“Cake”).objectAtIndex(0).valueForKey(“Azna_Mental_Cake”) as! Int)\nBlack Forest Cake Rate :\(self.cakesArray[0].objectForKey(“Hyderabad”).objectAtIndex(0).objectForKey(“Bakery”).ObjectAtIndex(0).objectForKey(“Cake”).objectAtIndex(0).valueForKey(“Black_Forest_Cake”) as! Int)” 

O puedes probar esto

 cell.cakeRateLbl.text = “Almon Cake Rate :\(self.cakes[indexpath.row].Almond_Cake)\nAzna Mental Cake Rate :\(self.cakes[indexpath.row].Azna_Mental_Cake)\nBlack Forest Cake Rate :\(self.cakes[indexpath.row].Black_Forest_Cake)”