У меня есть две модели: User
модель и книга Review
модель.Мой username
в Обзоре относится к типу User
, поэтому я могу получить данный отзыв и пользователя, который его создал.
Теперь я могу получить обзор, но не Пользовательвозражать с моим кодом.Что я делаю не так?
Класс пользователя
class User: NSObject {
var id: String?
var name: String?
var email: String?
var profileImageUrl: String?
init(dictionary: [String: AnyObject]) {
self.id = dictionary["id"] as? String
self.name = dictionary["name"] as? String
self.email = dictionary["email"] as? String
self.profileImageUrl = dictionary["profileImageUrl"] as? String
}
}
Структура обзора
struct Review {
let id: String
let bookName: String
let author: String
let review: String
let username: User
let createdAt: Date
init(id: String, bookName: String, author: String, review: String, username: User, timestamp: Double) {
self.id = id
self.bookName = bookName
self.author = author
self.review = review
self.username = username
self.createdAt = Date(timeIntervalSince1970: timestamp / 1000)
}
}
ОбзорКонтроллер
private func fetchReviews() {
let reviewRef = Database.database().reference().child("reviews")
let queryRef = reviewRef.queryOrdered(byChild: "timestamp").queryLimited(toLast: 5)
queryRef.observe(.value, with: { snapshot in
var temporaryReviews = [Review]()
for child in snapshot.children {
if let childSnapshot = child as? DataSnapshot,
let dictionary = childSnapshot.value as? [String:Any],
let user = dictionary["user"] as? [String:Any],
let id = user["id"] as? String,
let name = user["name"] as? String,
let profileImageUrl = user["profileImageUrl"] as? String,
let url = URL(string: profileImageUrl),
let bookName = dictionary["bookName"] as? String,
let author = dictionary["author"] as? String,
let review = dictionary["review"] as? String,
let timestamp = dictionary["timestamp"] as? Double {
let user = User(dictionary: <#T##[String : AnyObject]#> ??? // Cannot use a user object
let review = Review(id: childSnapshot.key, bookName: bookName, author: author, review: review, username: user, timestamp: timestamp)
DispatchQueue.main.async {
temporaryReviews.insert(review, at: 0)
self.reviews = temporaryReviews
self.tableView.reloadData()
}
}
}
})
}
Если я удаляю пользователя и связанные с ним значения из цикла, я получаю данные в пользовательском интерфейсе, но не username
или photoImageURL
, которые я обновляю в своем классе представления,Данные уже в Firebase.Как я могу прочитать данные и пользователя?