Вопрос немного расплывчатый, но я думаю, что вы пытаетесь загрузить определенные продукты на основе идентификаторов (ключей), хранящихся в массиве?
Если это так, вы не можете сделать это напрямую
Это
.queryEqual(toValue: ArrproductID)
не будет работать, так как ArrproductID является массивом, а .queryEqual допускает только одно значение.
База данных Firebase Realtime не имеет запроса IN. Для этого вам нужно будет перебрать каждое значение в массиве и получить продукт.
Предполагая, что ваша структура выглядит следующим образом
Products
product_0
ProductName: "Shampoo"
ProductPrice: "$1.99"
ProductImage: "some url"
product_7
ProductName: "Milk"
ProductPrice: "$2.99"
ProductImage: "another url"
, а затем код для чтения определенных продуктов, хранящихся в массиве
func getProducts() {
let productArray = ["product_0", "product_7"]
let productsRef = self.ref.child("Products")
for productId in productArray {
let thisProductRef = productsRef.child(productId)
thisProductRef.observeSingleEvent(of: .value, with: { snapshot in
let name = snapshot.childSnapshot(forPath: "ProductName").value as? String ?? "No Name"
let price = snapshot.childSnapshot(forPath: "ProductPrice").value as? String ?? "$0.00"
let image = snapshot.childSnapshot(forPath: "ProductImage").value as? String ?? "No Image"
print(name, price, image)
})
}
}
и вывод
Shampoo $1.99 some url
Milk $2.99 another url
Имейте в виду, что Firebase обычно не рекомендует перебирать наблюдения в тесном цикле. Это может заблокировать основной поток и помешать закрытиям обновлять пользовательский интерфейс. Если это небольшой набор данных, то это не должно быть проблемой.
Если это большой набор данных, здесь могут быть лучшие способы структурировать ваши данные, чтобы получить желаемые результаты. Например, если вы хотите получить все средства по уходу за волосами, добавление к каждому ребенку поля, такого как «ProductCategory» со значением «Уход за волосами», позволит вам легко запросить узел «Продукты» для всех продуктов по уходу за волосами.