Swift Cloud Firestore自定义对象映射

Swift Cloud Firestore自定义对象映射,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我对Firebase的新云Firestore相对较新,在尝试将数据映射到/从中映射时遇到困难。我试着通过Google online跟踪文档,但它存在一些问题,我无法找出问题的根源 当我尝试从[String:Any]转换到自定义结构时,文档建议我尝试以下操作: 但是,这在$0行上产生了一个错误。值为'NSObject'类型的数据(as:City.self)没有成员'data' 当我尝试将数据作为文档写入新集合时,文档建议我尝试以下操作: 但是这也会在上产生错误。setData(from:city)

我对Firebase的新云Firestore相对较新,在尝试将数据映射到/从中映射时遇到困难。我试着通过Google online跟踪文档,但它存在一些问题,我无法找出问题的根源

  • 当我尝试从
    [String:Any]
    转换到自定义结构时,文档建议我尝试以下操作:
  • 但是,这在
    $0行上产生了一个错误。值为'NSObject'类型的数据(as:City.self)
    没有成员'data'

  • 当我尝试将数据作为文档写入新集合时,文档建议我尝试以下操作:
  • 但是这也会在
    上产生错误。setData(from:city)
    的参数标签(from:)与任何可用的重载都不匹配


    是否有人熟悉这一点,试图为将Firestore数据转换为自定义结构提供额外的清晰度?我知道我的结构是可编码的

    从未找到错误的原因,但

  • 我最终将
    $0.data
    转换为一个JSON数据对象,然后进行适当的解码,以便将字典映射到结构

  • 如果我理解正确,您遇到的问题与我几天前遇到的问题相同:


    这里的关键是明确地执行
    导入FirebaseFirestoreSwift
    ,而不是只执行
    导入Firestore

    为什么我没有想到这一点!非常感谢。我希望文档能更具体地提到这一点,因为它说它在podfile示例中是可选的。不客气:D在得到Firebase团队的答复之前,我对这一点也感到困惑。我已经建议他们明确地加上这句话:)老兄,谢谢!这就是解决办法。头号人物。任何人看到这个,请确保将pod“FirebaseFirestoreSwift”也添加到您的pod文件中。哈哈。没问题。事实上,我真的很挣扎。我很高兴这有帮助:D
    docRef.getDocument { (document, error) in
                let result = Result {
                    try document.flatMap {
                        try $0.data(as: City.self)
                    }
                }
                switch result {
                case .success(let city):
                    if let city = city {
                        print("City: \(city)")
                    } else {
                        print("Document does not exist")
                    }
                case .failure(let error):
                    print("Error decoding city: \(error)")
                }
            }
    
    do {
        try db.collection("cities").document("LA").setData(from: city)
    } catch let error {
        print("Error writing city to Firestore: \(error)")
    }