如何使用结构中的函数从Swift的Firebase快照中获取数据?

时间:2019-11-01 13:34:48

标签: swift struct google-cloud-firestore swiftui

我正在从Cloud Firestore获取数据以填充ListView。我设法将数据放入数组,但是当我返回数组时,它显示为空。

//编辑

我已经实现了一个完成处理程序,非常适合“测试代码”,但是当在“ func industryPosts”中调用并传递到“ myArray”时,它返回nil。而“测试代码”则返回数据。我是完成处理程序和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返回了行业数组!

0 个答案:

没有答案