【问题标题】:Swift Core Data : enums in Core Data [duplicate]Swift Core Data:Core Data 中的枚举 [重复]
【发布时间】:2020-05-30 22:01:51
【问题描述】:

我正在尝试实现一个核心数据模型,该模型有效地反映了我在从特定 API 提取信息时使用的视图模型。我已经对其中的大部分内容进行了排序,但正在为一个属性而苦苦挣扎。有问题的属性是:

enum UnitType: String, Codable {
    case psi
    case kPa
    case litre
    case usg = "gallon"
    case kmph = "km/hour"
    case mph = "miles/hour"
    case celsius
    case fahrenheit
    case kgpmcubed = "kgpercubicmeter"
    case lbspusg = "lbsperusg"
    case lbspftcubed = "lbspercubicfeet"
    case apidensity
    case kg = "kilogram"
    case lbs = "pound"
}

我需要能够在此处设置枚举值,因为视图控制器使用此 UnitType 属性基于此枚举进行各种计算。如何使用核心数据创建枚举?基本上我需要能够像这样设置这个值:

MyEntity.unitType = viewModel.UnitType

【问题讨论】:

    标签: swift xcode core-data enums


    【解决方案1】:

    您不能将enum 类型存储在CoreData 中,但可以将其存储为rawValue。由于您的枚举具有 String 类型的 rawValue,您可以存储它的 rawValue 并使用枚举的 init 方法转换回 enum,如下所示:

    coreDataModel.unitType = viewModel.unitType.rawValue
    

    和:

    viewModel.unitType = UnitType(rawValue: coreDataModel.unitType)
    

    注意:当从rawValue 转换为enum 类型时,它是可选的,因为String 可以是任何东西,并且不能与enum 中提供的任何case 匹配。因此,需要提供default 值。

    【讨论】:

      【解决方案2】:

      很遗憾,您无法在CoreData 中保存枚举。

      您的模型中可以有一个String 变量:

      class MyEntity: NSManagedObject {
          @NSManaged public var unitType: String
      }
      

      然后您可以随时随地将其转换为您的 UnitType。

      myEntity.unitType = viewModel.UnitType.rawValue
      
      viewModel.unitType = UnitType(rawValue: myEntity.unitType)!
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-23
        • 2014-07-26
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多