【问题标题】:How to handle Firestore Query Results for later usage如何处理 Firestore 查询结果以供以后使用
【发布时间】:2020-01-03 15:32:01
【问题描述】:

我目前正在努力处理我的 Firestore 查询结果。 我想要做的是查询数据库,获取结果,将结果写入数组——>这已经在我下面的代码中工作了! 但除此之外,我稍后需要将该数组与第二个查询中的不同数组进行比较,这就是问题所在。

var arrayOfTuples = [(Int, String)]()

db.collection("Data").whereField("age", isGreaterThanOrEqualTo: 1).whereField("age", isLessThanOrEqualTo: 50).whereField("gender", isEqualTo: "F").getDocuments() { (querySnapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
             for (index, document) in querySnapshot!.documents.enumerated() {
             arrayOfTuples += [(index, document.documentID)]
             }       
    }
    print(arrayOfTuples)
} 
//Place where I need the array result

我可以在最后一个打印方法中使用数组结果,但我需要将它放在最后一个括号中,以便将它与第二个查询结果进行比较。 还没有找到任何我可以返回结果的东西,但也许它很简单(希望如此)。

希望这很清楚,否则请告诉我。 谢谢!

【问题讨论】:

标签: ios arrays swift google-cloud-firestore


【解决方案1】:

你不能同步你需要的异步调用

func loadQuery(com:@escaping( [(Int, String)] -> ())){ 
    var arrayOfTuples = [(Int, String)]() 
    db.collection("Data").whereField("age", isGreaterThanOrEqualTo: 1).whereField("age", isLessThanOrEqualTo: 50).whereField("gender", isEqualTo: "F").getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else {
                 for (index, document) in querySnapshot!.documents.enumerated() {
                 arrayOfTuples += [(index, document.documentID)]
                 }       
        }
        com(arrayOfTuples)
    } 
}

loadQuery { arr in 
  // compare here 
}  

【讨论】:

  • 非常感谢,这有效!但老实说,我只是部分理解。我应该如何比较 `loadQuery { arr in // 在此处比较 } ` 中的两个几乎相似的函数,因为我必须在下一步将结果转换为 Set 以将它们与交集方法进行比较.上面没有写,抱歉!
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多