получать имена из Firebase - PullRequest
       1

получать имена из Firebase

1 голос
/ 06 ноября 2019

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

Я знаю, что это означает, что методы вызываются одновременно, поэтому массив пуст. Я пробовал метод «Sleep ()» и не работает.

 //arrays of names and descriptions
    var Names:[String] = []
    var Desctiptions: [String] = []

начальный метод

 override func viewDidLoad() {

        super.viewDidLoad()


        getRestauraunt()


        //create slides
        scrollView.delegate = self
        slides = createSlides()
        setupSlideScrollView(slides: slides)
}
  func getRestauraunt(){

        let db = Firestore.firestore()
        db.collection("Test").getDocuments { (snapshot, err) in
            if let err = err {
                print("Error getting documents: \(err)")
            } else {
                for document in snapshot!.documents {
                    let name = document.get("Name") as! String
                    let description = document.get("Description") as! String

                    //print("Names: ",name," Description: ",description)

                    self.Names.append(name)
                    self.Desctiptions.append(description)

                }
            }
        }


    }

метод создания слайдов

 func createSlides() -> [Slide] {
        //firebase link
        let slide1:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide
        slide1.labelTitle.text = Names[0]
       }

Я хотел бы, чтобы кто-нибудь показал мне, как получить метод createSlides ()ожидать завершения метода getRestauraunts (). Спасибо

1 Ответ

2 голосов
/ 06 ноября 2019

Просто назовите его с конца getrestaurant() 'getDocuments замыкания

 func getRestauraunt(){

  //as before...

            } else {
                for document in snapshot!.documents {
                    let name = document.get("Name") as! String
                    let description = document.get("Description") as! String
                    self.Names.append(name)
                    self.Desctiptions.append(description)
                }
                self.createSlides()
            }
        }
    }

Кроме того, возможно, стоит создать простую структуру Document со свойствами name и descriptionи только с одним массивом: [Document]

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