【问题标题】:Swift Firestore Get Document IDSwift Firestore 获取文档 ID
【发布时间】:2017-12-10 21:06:01
【问题描述】:

我正在为我的数据库使用 FirebaseFirestore。

我有一个包含名称和描述的列表数组。我还想获取每个列表唯一的 documentId。这可能吗?

List.swift

struct List {
    var name:String
    var description:String

    var dictionary:[String:Any] {
        return [
            "name":name,
            "description":description
        ]
    }
}

ListTableViewController.swift

func getLists() {
    if Auth.auth().currentUser != nil {
        db.collection("lists").getDocuments { (querySnapshot, error) in
            if let error = error {
                print("Error getting documents: \(error)")
            } else {
                self.listArray = querySnapshot!.documents.flatMap({List(dictionary: $0.data())})
                DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
            }
        }
    }
}

我发现你可以通过这样做来获取 documentId...

    for document in querySnapshot!.documents {
        print("\(document.documentID) => \(document.data())")
    }

但是如何将其存储在我的列表中以便以后调用?

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    1.假设您正在获取快照中的文档。

        guard let documents = ducomentSnapshot?.documents else {
          print("Error fetching documents: \(error!)")
          return
       }
    

    // 使用此代码获取每个文档对象的documentId。

      for i in 0 ..< documents.count {
            let dictData = documents[i].data()
            let documentID = documents[i].documentID
            print("Document ID \(documentID)")
        }
    

    【讨论】:

      【解决方案2】:

      如果这是最好的方法,我不肯定,但我附加到 listArray 并且它似乎有效。

      self.listArray.append(List(name: document["name"] as! String, description: document["description"] as! String, documentId: document.documentID))
      

      【讨论】:

        【解决方案3】:

        在列表结构中添加 id 属性:

        struct List {
            var name:String
            var description:String
            var id: String?
        
            var dictionary:[String:Any] {
                return [
                    "name":name,
                    "description":description
                ]
            }
        }
        

        然后在映射文档时手动分配 id 属性:

        list = documents.compactMap{ (queryDocumentSnapshot) -> List? in
            var listItem = try? queryDocumentSnapshot.data(as: List.self)
            listItem?.id = queryDocumentSnapshot.documentID
            return listItem
        }
        

        【讨论】:

          猜你喜欢
          • 2019-07-04
          • 2021-07-22
          • 2018-09-03
          • 2021-07-20
          • 1970-01-01
          • 1970-01-01
          • 2020-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多