【问题标题】:Create Fluent Model with String Enum使用字符串枚举创建 Fluent 模型
【发布时间】:2018-11-14 18:16:44
【问题描述】:

这是我的 Fluent 模型

struct Ailment: PostgreSQLModel {

enum Frequency: String , Content {
    case regular = "Regular"
    case occasional = "Occasional"
    case incidentFound = "Incident Found"
}

var id: Int?

var ailment: String

var frequency: Frequency

var dateIdentified: Date?

var underMedication: Bool

var breifDescription: String

}

我可以使用 Int Enum 创建 Fluent 模型,但它不适用于 String Enum

我遇到了异常

Fatal error: Error raised at top level: ⚠️ DecodingError: Cannot initialize Frequency from invalid String value 1

提前致谢:)

【问题讨论】:

  • 我在新创建的项目中试过这个。它抛出相同的异常。

标签: fluent vapor


【解决方案1】:

引用 this Issue 它适用于 Vapor 3.0.6 和 Fluent 3.0.0。如果您的枚举符合ReflectionDecodable,则应正确创建该表。

【讨论】:

  • 我遇到了同样的问题并遇到了您的答案。如果枚举有超过 2 个案例,您究竟如何符合 ReflectionDecodable?
  • @KevinRenskers 只是检查示例:Enums with two or more cases can conform. enum Pet { case cat, dog } extension Pet: ReflectionDecodable { static func reflectDecoded() -> (Pet, Pet) { return (.cat, .dog) } }
  • 它说两个或更多,只需将案例添加到您的枚举中。 reflectDecoded() 只是检查两个案例是否相同。 enum Pet { case cat, dog, mouse } extension Pet: ReflectionDecodable { static func reflectDecoded() -> (Pet, Pet) { return (.cat, .dog) } }
  • 那么如果我有 4 个案例,那么 reflectDecoded 是如何工作的,因为它只检查两个案例,并返回前 2 个案例?抱歉这些问题,我只是不了解这部分:)
  • 它返回一个元组,其中包含您的枚举案例类型的两个不同实例。这并不意味着它只适用于方法中使用的两种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
相关资源
最近更新 更多