Выборка данных из Firebase


#1

Доброго времени суток, уважаемые!

Никак не могу найти в инете ничего подходящего и сам не могу додумать.

Есть функция которая получает массив данных из FireBase.

class GalleryViewController: UIViewController {

var ref: DatabaseReference!
var Books = [Book]()
var UsersGlobal = [String]()

@IBOutlet weak var GalleryCollectionView: UICollectionView!
override func viewDidLoad() {
    super.viewDidLoad()
    GalleryCollectionView.delegate = self
    GalleryCollectionView.dataSource = self
    self.ReadBooks()
}

func ReadBooks() {

   var GetBooks = [Book]()
   ref = Database.database().reference()
    
   let queue = DispatchQueue.global(qos: .utility)
    queue.async{

    self.ref.child("Users").observe(.value, with: { snapshot in
        if snapshot.exists() {
            if let result = snapshot.children.allObjects as? [DataSnapshot] {
                for child in result {
                    self.UsersGlobal.append(child.key)
                }
            }
        }
        for item in self.UsersGlobal {
            self.ref.child("Users").child(item).observeSingleEvent(of: .childAdded, with: { (snapshot) in
                for item2 in snapshot.children.allObjects as! [DataSnapshot] {
                    let NewBook = Book(snap: item2)
                    GetBooks.append(NewBook)
                }
             self.Books += GetBooks
             self.GalleryCollectionView.reloadData()
            })
        }
    })
        DispatchQueue.main.async {
            
        }
   } 
        }

после получения данных мне нужно заполнить ими CollectionView.
self.GalleryCollectionView.reloadData() - эта строка мне не нравится там где она находится сейчас- она какой то костыль.
Хочу получить нормально после отработки функции весь массив данных, поработать с ним и потом уже сделать self.GalleryCollectionView.reloadData() .
Но в конце функции все массивы пустые (self.Books, GetBooks)
в какой части кода мне получить данные, что бы были вины вне зоны функции.
не пойму почему глобальный массив self.Books , если его посмотреть в конце функции , пуст …