Я получаю данные из Cloud Firestore для заполнения ListView. Мне удалось получить данные в массив, но когда я возвращаю массив, он отображается пустым.
// Edit
Я реализовал обработчик завершения, отлично работает для'Test Code', но когда вызывается в 'func industryPosts' и передается в 'myArray', возвращается ноль. Пока «Тестовый код» возвращает данные. Я новичок в обработчиках завершения и Swift в целом. Пожалуйста, дайте мне знать, что я скучаю. Спасибо.
// Редактировать Я не смог вернуть значения, но вызов IndustryPosts, где мне нужно было использовать его, сработал!
import Foundation
import SwiftUI
class IndustryData {
var _snapshotArray : Array<Any>?
func getSnapshotArray(collectionRef: String, completionHandler: @escaping (Array<Any>?, NSError?) -> ()){
if let snapArray = self._snapshotArray {
completionHandler(snapArray, nil)
} else {
var snapArray : Array<Any> = []
db.collection(collectionRef).getDocuments { (snapshot, error) in
guard let snapshot = snapshot else {
print("Error - > \(String(describing: error))")
return
}
for document in snapshot.documents {
let item = Industry(avatar: document.get("avatar") as! String, name:document.documentID, tags: document.get("tags") as! String)
snapArray.append(item)
}
self._snapshotArray = snapArray
completionHandler(snapArray, error as NSError?)
}
}
}
}
Затем, при необходимости, вызовите функцию ниже
func getposts()-> [Industry] {
let data = IndustryData()
data.getSnapshotArray(collectionRef: "industry") { (snapshotArray, error) in
if snapshotArray != nil {
self.myArray = snapshotArray!
}
}
return myArray as! [Industry]
}
myArray вернул промышленный массив!