Как выполнить функцию, пока Firestore не завершит загрузку данных с помощью Swift? - PullRequest
0 голосов
/ 15 февраля 2019

Я искал много информации в Google, но до сих пор ни одно решение не может решить мою проблему ...

Я хочу показать список в пользовательском интерфейсе, которому нужны данные в Firestore, но каждый раз, когда список будетбыть пустым, потому что он не ждал загрузки Firestore.Как я могу решить это?

Вот мой код:

private var imgList: [String] = []
override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        downloadfromFilestore()
        bindingView()
}

func downloadfromFirestore(){
    //firestore official code
    for i firestoreDataResult in{
        imgList.append(i.imgURL)
    }
}

func bindingVIew(){
    customElement.setURLs(imgList)
}

Я уже пробовал так много решений, таких как DispatchQueue, DispatchGroup, async ..... Я очень новый вСвифт, пожалуйста, помогите мне ..

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Ваш downloadFromFilestore должен выглядеть примерно так (согласно документации):

func downloadFromFiresfore() {
  let docRef = db.collection("cities").document("SF")
  docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
        print("Document data: \(dataDescription)")
        // reload UI here. This part will be executed only when download is completed. 
    } else {
        print("Document does not exist")
    }
  }
}

Обратите внимание на то, куда должен быть помещен код пользовательского интерфейса для перезагрузки.(Полагаю, вы поместили его за пределы блока завершения)

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

0 голосов
/ 15 февраля 2019

Официальный код Swift Firestore для вашего func downloadFromFirestore()

let docRef = Firestore.firestore().collection("collectionName").document("documentID")

docRef.getDocument { (document, error) in
    if let document = document, document.exists {
        //document downloaded
        let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
        print("Document data: \(dataDescription)")
    } else {
        print("Document does not exist")
    }
}

Более официальный код Swift Fitestore https://firebase.google.com/docs/firestore/query-data/get-data?refresh=1

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