如何使用swift以对象的形式将数据存储到firestore中

时间:2018-03-15 09:16:26

标签: swift google-cloud-firestore

我想使用swift语言将数据存储到对象形式。数据库的数据结构类似于

collection/
document/
collection/
document1/:
           Invitess1(object) :
                              name :"santosh"
                              phone :1234567890 
          Invitee2(object) :
                              name :"sam"
                              phone:1234654768
          .....
document 2/
          Initee1(object) :

                           name:"red"
                           phone:4654343532
         .......

是否可以存储这样的数据?如果可能怎么做?我试过这样:

for var i in 0..<n { // n is no.of selected contacts
            for var j  in i...i {
                print("amount is \(d[i])")
                print("phone number is \(num[j])")
                let dataToSave:[String: Any] = ["name" :"vijayasri",
                                                "PhoneNumber":num[j],
                                                "Amount": d[i],
                                                ]
            }

        }
        var ref:DocumentReference? = nil
        ref = self.db.collection("deyaPayUsers").document("nothing").collection("Split").addDocument(data: dataToSave){
            error in
            if let error = error {
                print("error adding document:\(error.localizedDescription)")

            } else {
                print("Document ades with ID:\(ref!.documentID)" )
            }

        }


    }

但它不起作用。怎么做..

1 个答案:

答案 0 :(得分:1)

您的示例代码永远不会按预期工作,因为在dataToSave循环的每次迭代都会覆盖j。您的内部j循环可能会在i...i

处出现拼写错误

要在一个文档中存储多个对象,请在Swift中创建包含多个对象的文档。由于您知道如何将对象编码为[String:Any],因此只需将这些词典合并为更大的[String:Any]文档。

我会将您的代码更改为:

var dataToSave: [String:Any] = []()
for var i in 0..<n { // n is no.of selected contacts
    var inProcess: [String:Any] = []()
    for var j  in i...i {
        print("amount is \(d[i])")
        print("phone number is \(num[j])")
        let detail: [String: Any] = ["name" :"vijayasri",
                                     "PhoneNumber":num[j],
                                     "Amount": d[i]]
        inProcess["NextKey\(j)"] = detail
     }
    dataToSave["SomeKey\(i)"] = inProcess
 }

 var ref:DocumentReference? = nil
 ref = self.db.collection("deyaPayUsers").document("nothing").collection("Split").addDocument(data: dataToSave){
        error in
        if let error = error {
            print("error adding document:\(error.localizedDescription)")

        } else {
            print("Document ades with ID:\(ref!.documentID)" )
        }

    }


}