Экран загрузки при загрузке изображений из Firebase - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть куча изображений, которые я должен получить из базы данных со следующим кодом, где url - это массив со ссылкой на изображения, которые находятся в хранилище Firebase.

func downloadFromServer(url: [String], imageNumber: Int){
    for i in url{
    let i = URL(string: i)
        print("I" , i)
        URLSession.shared.dataTask(with: i!) { data, response, error in
         guard
             let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
             let data = data, error == nil,
             let image = UIImage(data: data)

             else { return }
            print("Here", image)
         DispatchQueue.main.async() {
                print("Appended")
                imageArrayWatch.append(image)
                //imageArr.append(image)


         }
         }.resume()
    }

}

Я хочу, чтобы мое приложение отображало экран загрузки во время извлечения изображений из базы данных. Тем не менее, когда я пытаюсь вызвать showSpinner в моем контроллере вида, как это

self.showSpinner(onView: self.view)
downloadFromServer(url: imageName)
self.removeSpinner()

Показать и удалить функцию счетчика просто показать экран загрузки. Это не работает, потому что моя функция downloadFromServer завершается до того, как все изображения извлекаются из базы данных, и я вижу экран загрузки только на секунду. Как я могу сделать мой экран загрузки окончательным sh в то время, когда все мои изображения добавляются в массив mageArrayWatch?

1 Ответ

2 голосов
/ 13 апреля 2020

Вам нужна группа отправки

var imageArrayWatch = [UIImage]()

func downloadFromServer(url: [String], imageNumber: Int){
    let g = DispatchGroup()      ////// 1
    for i in url{
    let i = URL(string: i)
        print("I" , i)
        g.enter()         ////// 2
        URLSession.shared.dataTask(with: i!) { data, response, error in
         guard
             let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200,
             let data = data, error == nil,
             let image = UIImage(data: data)

            else {  g.leave() ;   return }   ////// 3
            print("Here", image)
         DispatchQueue.main.async() {
                print("Appended")
            self.imageArrayWatch.append(image)
            g.leave()    ////// 4
         }
         }.resume()
    }

    g.notify(queue: .main) {       ////// 5

        // stop loading here

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...