Swift Firestore获取文档ID

时间:2017-12-10 21:06:01

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

我正在使用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())")
    }

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

3 个答案:

答案 0 :(得分:5)

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)")
    }

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

向您的列表结构添加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
}