【问题标题】:How can I save an enum String rawValue to Firebase's Cloud Firestore so the data is returned correctly as a String?如何将枚举字符串 rawValue 保存到 Firebase 的 Cloud Firestore,以便将数据作为字符串正确返回?
【发布时间】:2021-02-28 10:45:20
【问题描述】:

我正在构建一个应用程序,用于存储体操运动员的一些基本用户信息。从下面的屏幕截图中可以看出,它是一个简单的结构,包含字符串和 1 个布尔值。在 Cloud Firestore 控制台上一切正常。

当我获取数据时,我使用自动类型序列化来构造一系列GymnastSummary。这成功并显示了姓名和出生日期列表。

我的问题

当我尝试访问 scheme 时,我的应用程序崩溃了。查看 Xcode 中的对象 schemeschemeGender 与预期的不同。巧合的是,这两个值都是从枚举列表中选择的,并且.rawValue 被保存到 Cloud Firestore。当我第一次设置它时,我认为它很好,因为 Cloud Firestore 控制台显示了我的预期。将.rawValue 保存到 Cloud Firestore 时,我是否缺少幕后的东西。

我附上了两个enums 的屏幕截图。它们非常基础。

【问题讨论】:

  • 我认为 schemeGender 通过了 "(" 括号而不是男孩/女孩
  • 第一个屏幕截图来自 Firebase 控制台,所以它肯定通过了“男孩”,当它被读回时,它转到“(”
  • 以后请不要发布您的代码截图,而是以文本形式发布代码 - 并使用 Stack Overflow 的格式选项进行标记。

标签: ios swift firebase google-cloud-firestore


【解决方案1】:

如果结构是使用Codable 创建的,只需将结构成员声明为枚举类型

var scheme : Scheme // why are all struct members optional?

并在枚举中采用Codable

enum Scheme : String, Codable, ...

编码器/解码器代表您进行转换。


注意:

请发布文字,而不是图片。

【讨论】:

  • 谢谢,这个改动解决了这个问题。为截图道歉。我认为他们清楚地显示了我的问题。
  • 有,但是没有人愿意帮忙重新输入一堆代码来测试代码。
猜你喜欢
  • 2018-08-24
  • 1970-01-01
  • 2015-12-09
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 2019-12-24
  • 2011-09-05
相关资源
最近更新 更多