У меня есть приложение, которое приносит данные из fireStore и отображает данные в tableView. Я проверил это, моя модель данных и моя функция getData работают просто отлично. Мои данные в огненной базе, как это; Изображение моей базы данных пожарного магазина1
Моя модель данных выглядит следующим образом;
import Foundation
import Firebase
struct Exercise {
var explanation: [String]
var id: String
var name: String
var dictionary: [String: Any] {
return [
"explanation": explanation,
"id": id,
"name": name,
]
}
}
extension Exercise {
init?(dictionary: [String : Any]) {
guard let explanation = dictionary["explanation"] as? [String],
let id = dictionary["id"] as? String,
let name = dictionary["name"] as? String
else { return nil }
self.init(explanation: explanation, id: id, name: name)
}
}
Моя функция cellForRowAtIndexPath блокируется следующим образом:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ExerciseCell", for: indexPath) as! ExerciseCell
cell.exerciseName.text = exercises[indexPath.row].name
return cell
}
и, наконец, моя функция getData выглядит следующим образом:
private var exercises: [Exercise] = []
private var documents: [DocumentSnapshot] = []
func getData(exerciseName: String) {
db.collection(exerciseName).getDocuments() { (snapshot, error) in
guard let snapshot = snapshot else {
print("Error fetching snapshot results: \(error!)")
return
}
let models = snapshot.documents.map { (document) -> Exercise in
if let model = Exercise(dictionary: document.data()) {
return model
} else {
// Don't use fatalError here in a real app.
fatalError("Unable to initialize type \(Exercise.self) with dictionary \(document.data())")
}
}
self.exercises = models
self.documents = snapshot.documents
print(exercises[0].name) //This works just fine
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}