У меня есть collectionView с изображением, меткой и рейтинговой системой представления космоса в каждой ячейке. Рейтинг космоса связан с огненной базой, где оценки для каждого продукта хранятся в виде значения для идентификатора пользователя. Проблема заключается в том, что рейтинг продукта случайным образом отображается как 0 / пусто, когда я оцениваю продукт много раз. В большинстве случаев рейтинг обновляется до правильного нового среднего рейтинга, но иногда он просто отображается пустым и случайным образом фиксируется после того, как я оценил продукт еще несколько раз.
Я создал класс Product, который имеет идентификатор, имя, imageUrl и рейтинг космоса для каждого продукта:
class Product {
var category: String?
var name: String?
var imageUrl: String?
var rating: Double = 0
var id: String?
init(rawData: [String: AnyObject]) {
id = rawData["id"] as? String
name = rawData["name"] as? String
imageUrl = rawData["imageUrl"] as? String
if let ratingRaw = rawData["ratings"] as? [String: Int] {
let values = Array(ratingRaw.values)
var sum = 0
for item in values {
sum += item
}
rating = Double(sum) / Double(values.count)
}
}
}
Кажется, проблема заключается в классе продукта, как я пытался изменить строку кода var rating: Double = 0
на var rating: Double = 3
, что устраняет проблему случайного отображения космоса пустым, но вместо этого случайным образом отображается с 3 звездами.
Затем я показываю рейтинг, создавая экземпляр Класс продукта в v c:
var product: Product?
detailCosmosView.rating = product?.rating ?? 0
Пользователь касается рейтинга космоса и нажимает кнопку отправки, этот код обновляет рейтинг пользователя:
func updateRating(double: Double) {
guard let userId = Auth.auth().currentUser?.uid else { return }
guard let category = product?.category, let id = product?.id else { return }
Database.database().reference()
.child("Categories")
.child(category)
.child(id)
.child("ratings")
.child(userId)
.setValue(double)
}
Есть, казалось бы, нет проблем с этим битом кода.