Я новичок в 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)
}