首页 > 解决方案 > Swift Core Data:核心数据中的枚举

问题描述

我正在尝试实现一个核心数据模型,该模型有效地反映了我在从特定 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

标签: swiftxcodecore-dataenums

解决方案


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

coreDataModel.unitType = viewModel.unitType.rawValue

和:

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

注意:从转换rawValueenum类型时,它是可选的,因为String可以是任何东西,并且不能caseenum. 因此,需要提供一个default值。


推荐阅读