Save Swift Enum In Core Data

This post presents an implementation of a Swift enum property on a Core Data Model. Following the method in this post will allow you to get and set a model property using an enum type.

Create Enum

The first step is to create a representative enum for a model property. For this example, a State enum will be created with the cases on, off, and unknown.

enum State: Int32 {
    case off = 0
    case on = 1
    case unknown = 2
}

Create A Core Data Model

The next step is to create a Core Data Model called StatefulModel. One solution to save Swift enums in Core Data is to create a corresponding Int32 property and implement a custom getter and setter. First, create a stateValue property with the type Int32 on a new Core Data Model.

Next, implement the following extension for StatefulModel:

extension StatefulModel {
    var state: State {
        // To get a State enum from stateValue, initialize the
        // State type from the Int32 value stateValue
        get {
            return State(rawValue: self.stateValue)!
        }

        // newValue will be of type State, thus rawValue will
        // be an Int32 value that can be saved in Core Data
        set {
            self.stateValue = newValue.rawValue
        }
    }
}

Saving a Swift Enum To Core Data

That’s it! The StatefulModel now has an enum property that supports both get and set.

let context = // your Core Data Managed Object Context

// Create a new Stateful Model
let entityDescription = NSEntityDescription.entity(
    forEntityName: “StatefulModel”,
    in: context
)!
        
let model = StatefulModel(
    entity: entityDescription, 
    insertInto: context
)

// Set a new state
model.state = .on

// Get and print the State enum value
print(model.state)

// Save the Stateful Model
try! context.save()

FREE all Swift loading animations.

Loading Animation Example

Follow AdvancedSwift and immediately get access to commented code for these animations that you can use in your projects.