Невозможно сохранить данные Firestore в глобальную структуру - PullRequest
0 голосов
/ 28 апреля 2020

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

Я немного понимаю, что проблема заключается в асинхронном разделе initializeDocs () моего кода. Я пробовал DispatchQueue.main.asyn c, а также обработчики завершения (хотя я не уверен, что способ, которым я их сделал, был правильным), но я все еще получаю тот же результат - т.е. данные Firestore не сохраняются в структуре, и вместо этого я возвращаю пустой массив, когда пытаюсь вызвать их в моей функции инициализации. Любая помощь приветствуется.

Вот мой код:

struct booksStruc{
    static var modelAry = [Model]()
    static var titles: [String] = []
    static var authors: [String] = []
    static var years: [String] = []
    static var emails: [String] = []
    static var capacity = 0
    static var counter = 0
}

init(logo:String, title:String, author:String, year:String, email:String, desc:String) {

    let group = DispatchGroup()
    ref = Database.database().reference()

    super.init()

    group.enter()

    DispatchQueue.main.async{
        self.initializeDocs()
        group.leave()
    }


    self.logoTitle = logo
    self.imageTitle = title
    self.imageAuthor = author
    self.imageYear = year
    self.imageEmail = email
    self.imageDesc = desc

    print("end of init's titles are ", booksStruc.titles)
    print("end of init's capacity is ", booksStruc.capacity)
}

func initializeDocs() {

    db.collection("books").getDocuments() { (querySnapshot, err) in

        if let err = err {
            print("Error getting documents: \(err)")
        } else {
            let downloadGroup = DispatchGroup()

            downloadGroup.enter()
            DispatchQueue.main.async{
                for document in querySnapshot!.documents {

                        let dictionary = document.data()
                        booksStruc.capacity = document.data().capacity
                        //print("capacity is: ", capacity)

                        for(key, value) in dictionary{

                            if(key == "title"){
                                booksStruc.titles.append(value as! String)
                            } else if(key == "author"){
                                booksStruc.authors.append(value as! String)
                            } else if(key == "year"){
                                booksStruc.years.append(value as! String)
                            } else if(key == "email"){
                                booksStruc.emails.append(value as! String)
                            }
                            //print("\(key) : \(value)")
                        }
                }
                downloadGroup.leave()
            }
        }

    }

    print("titles are ", booksStruc.titles)
    print("capacity is ", booksStruc.capacity)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...