Swift Core Data:Core Data 中的枚举 [重复]
Posted
技术标签:
【中文标题】Swift Core Data:Core Data 中的枚举 [重复]【英文标题】:Swift Core Data : enums in Core Data [duplicate] 【发布时间】: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
【问题讨论】:
【参考方案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)!
【讨论】:
以上是关于Swift Core Data:Core Data 中的枚举 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Swift Core Data NSFetchRequest 没有结果