你好,我是swift編程的新手,我想從loadData()
得到label
的值用於我的路徑(參考)到我的數據庫dbRef!.child(place+"/placeLabel")
。我的意思是?!我讀取了「Dio Con Dio」節點上的數據。這是因爲值place
是let place = "Dio Con Dio"
。所以,我的應用程序不會加載來自「Paradosiako - Panorama」節點的數據。我想加載數據庫中的所有內容,我認爲如果我可以將place
的值更改爲下一個節點,它可以讀取所有數據。在函數外部獲取一個值
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()
}
}
}
(這個問題是一個跟進from this one。)
爲什麼不讓'label'實例字段或使loadData()返回一個String類型?你也可以將'label'作爲'inout'參數。 –
所以你想從e函數獲取一個值,然後將它傳遞給loadData中的標籤? –
基本上我想'label'值在它初始化之前,所以我可以在這裏使用它:'dbRef!.child(place +「/ placeLabel」)'。我想將'label'值賦給'place'值。 –