【问题标题】:Error when trying to call setData(from: ) in the Cloud Firestore ios API. How can i fix it?尝试在 Cloud Firestore ios API 中调用 setData(from: ) 时出错。我该如何解决?
【发布时间】:2020-07-16 04:48:35
【问题描述】:

在 Swift 中工作..

我正在尝试调用 .setData(from: ) 将 Codable 结构写入 Cloud Firestore 数据库中的文档,如 Firebase 文档中所述:

https://firebase.google.com/docs/firestore/manage-data/add-data#custom_objects

但是,我收到错误消息:“参数标签 '(from:)' 与任何可用的重载都不匹配”

奇怪的是我曾经能够在模拟器上构建和运行一次,并成功发布了一个文档,但现在显然编译器调用了这个错误并导致构建失败。相关代码如下:

导致构建失败的行:

do {
      try collectionRef.document(lensSet.id.uuidString).setData(from: lensSet)

    } catch let error {
      print(error)
    }

可编码结构:

struct LensSet: Codable, Identifiable {
  var id: UUID

  // Coding KEYS
  private enum CodingKeys: String, CodingKey {
      case id
  }
}

看起来他们在文档中调用的函数可能不存在?任何帮助表示赞赏!

【问题讨论】:

  • 看起来好像setData(from:) 已被弃用,但他们忘记更新解释为什么它曾经有效而现在无效的文档。我也没有在当前 SDK 的任何地方看到 setData(from:) 方法。
  • 要回答您关于如何修复它的问题,您必须为 setData() 方法提供一个 [String: Any] 字典,您可以从结构中执行该字典(通过返回此字典的结构中的计算属性) 或手动(使用结构的现有属性)。
  • 好的,谢谢!我想这太好了,难以置信!当它起作用时,实际上就在今天早上,所以它仍然有点神秘,但它似乎确实从文档中消失了..
  • 好吧,他们今天没有发布更新,所以不太可能出现这种情况。它仍在您提供的链接中的文档中。
  • 很奇怪! Firebase 添加和扩展以使制作客户对象更容易,但忘了告诉我们。查看我对这个问题的回答

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


【解决方案1】:

文档并没有完全错误,只是有一部分不完整。

编辑: 用于 TL;DR

请参阅 Peter Friese 的指南:Mapping Firestore Data in Swift

更多解释

Firebase 添加了一个扩展来简化自定义对象的制作,但没有在文档中提及该扩展。 (我假设它是一个扩展)

自定义对象的文档是需要扩展的代码示例

通过将其添加到您的 podfile 来进行简单修复

pod 'FirebaseFirestoreSwift'

然后在终端或 cocoapods 中进行 pod 更新。

然后在你的类中更新导入以包含它

import Cocoa
import FirebaseCore
import FirebaseFirestore
import FirebaseFirestoreSwift

为了参考文档中的代码是这样的

try db.collection("cities").document("LA").setData(from: city)

还有这个

let docRef = db.collection("cities").document("LA")

 docRef.getDocument { (document, error) in
    let result = Result {
    try document.flatMap {
       try $0.data(as: City.self)
    }
 }

还有这一行

.data(as: City.self)

.setData(from:

是需要 FirebaseFirestoreSwift 的“麻烦制造者”

【讨论】:

  • @spenser 太好了!如果这解决了它,请接受答案,以便它可以帮助其他人。 How to Accept
  • 我创建了一份在 Firestore 中使用 Codable 的综合指南:peterfriese.dev/firestore-codable-the-comprehensive-guide。我们还更新了文档以包含更多 Codable 示例。
  • @PeterFrese 这是一个很棒的指南。极好的。我将其整合到答案中,以便人们可以更快地找到它。谢谢你写它。
猜你喜欢
  • 2020-02-26
  • 1970-01-01
  • 2021-08-21
  • 2016-05-12
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多