【问题标题】:Swift Completion in Firestore在 Firestore 中快速完成
【发布时间】:2020-04-23 08:36:19
【问题描述】:

我想在从 Firestore 获取所有信息后重新加载我的 TableView。

到目前为止,这是我的代码:但无论如何它没有意义。我只是边走边写。 如何为 Firestore 编写完成块

谢谢。

 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "inseratCell", for: indexPath) as! ListTableViewCell
    let returnCell = getCellInfo(indexInt: indexPath.row, cell: cell) { error, cell in

    }
     return cell
}
func getCellInfo(indexInt: Int, cell: ListTableViewCell,completion: @escaping(_ success:Bool, _ cell: ListTableViewCell)-> ()) {
    let db = Firestore.firestore()
    db.collection("Inserate").document(inserate[indexInt]).getDocument { (document, error) in

         if error == nil {
             if document != nil && document!.exists {

                 let documentData = document!.data()
                     if(documentData != nil){
                        cell.cityLabel.text = documentData!["Ort"] as? String
                        cell.costLabel.text = "\(documentData!["Kaufpreis"] as! String) €"
                        cell.groundSquareLabel.text = "\(documentData!["Grundgröße"] as! NSNumber) m²"
                        cell.HousesquareLabel.text = "\(documentData!["Wohnfläche"] as! NSNumber) m²"
                        cell.HousesquareLabel.text = "\(documentData!["Wohnfläche"] as! NSNumber) m²"
                        cell.idLabel.text = document?.documentID

                        let imageUrl = documentData!["TitleBild"] as! String
                        let url = URL(string: imageUrl)

                        ImageService.downloadImage(withURL: url!) { image in
                            cell.imageM.image = image
                        }
                }

            }
        }

    }
    return completion(true, cell)

}

【问题讨论】:

    标签: ios arrays swift string


    【解决方案1】:

    您可以为 Firebase 创建一个管理器:

        func getSomething(completion: @escaping ([Something]) -> Void) {
            var something: [Something] = []
            guard let userId = Auth.auth().currentUser?.uid else { return }
            database.collection("collectionName").getDocuments() { (querySnapshot, err) in
                if let err = err {
                    print("Error getting documents: \(err)")
                } else {
                    for document in querySnapshot!.documents {
                        guard let model = try? FirestoreDecoder().decode(Something.self, from: document.data()) else { return }
                        if userId == model.userId {
                            something.append(model)
                        }
                        print(model)
                    }
                }
                completion(something)
            }
        }
    

    然后在你的 VC 中:

    var something: BehaviorRelay<[Something]> = BehaviorRelay(value: [])
    
      FirebaseManager.shared.getSomething { something in
                    self.something.accept(something)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-05
      • 2020-02-08
      • 1970-01-01
      相关资源
      最近更新 更多