Bonjour, je suis nouveau à la programmation rapide et je veux obtenir la valeur label
de loadData()
pour utiliser l'utilisation de mon chemin (référence) vers ma base de données sur dbRef!.child(place+"/placeLabel")
. Ce que je veux dire?! Je lis les données qui sont sur le noeud "Dio Con Dio". Cela arrive parce que la valeur place
est let place = "Dio Con Dio"
. Donc, mon application ne charge pas les données du nœud "Paradosiako - Panorama". Je veux charger tout de la base de données et j'ai pensé que si je pourrais faire la valeur place
pour passer au nœud suivant, il pourrait lire toutes les données.Obtenir une valeur let en dehors d'une fonction
import UIKit
import FirebaseDatabase
class PlacesTableViewController: UITableViewController {
//MARK: Properties
@IBOutlet weak var placesTableView: UITableView!
//database reference
var dbRef:FIRDatabaseReference?
var places = [Places]()
private var loadedLabels = [String: String]()
private var loadedRatings = [String: Int]()
//handler
var handle:FIRDatabaseHandle?
override func viewDidLoad() {
super.viewDidLoad()
dbRef = FIRDatabase.database().reference()
// Loads data to cell.
loadData()
}
private func loadData() {
let place = "Dio Con Dio"
dbRef!.child(place+"/placeLabel").observe(.childAdded, with: {
(snapshot) in
let label = snapshot.value as! String
self.updatePlace(snapshot.key, label: label)
})
dbRef!.child(place+"/rating").observe(.childAdded, with: {
(snapshot) in
let rating = snapshot.value as! Int
self.updatePlace(snapshot.key, rating: rating)
})
}
private func updatePlace(_ key: String, label: String? = nil, rating: Int? = nil) {
if let label = label {
loadedLabels[key] = label
}
if let rating = rating {
loadedRatings[key] = rating
}
guard let label = loadedLabels[key], let rating = loadedRatings[key] else {
return
}
if let place = Places(name: label, rating: rating) {
places.append(place)
placesTableView.reloadData()
}
}
}
(Cette question est un suivi from this one.)
Pourquoi ne faites-vous pas 'label' un champ d'instance ou faites' loadData() 'retourner un type' String'? Vous pouvez également passer 'label' en tant que paramètre' inout'. –
Vous voulez donc obtenir une valeur de la fonction e, puis la passer à l'étiquette dans loadData? –
je veux fondamentalement la valeur 'label' avant qu'il ne soit initialisé, donc je peux l'utiliser ici:' dbRef! .child (place + "/ placeLabel") '. Je veux assigner la valeur 'label' à la valeur' place'. –