Swift: 列挙型を使用して CoreData に状態を保存する 質問する

Swift: 列挙型を使用して CoreData に状態を保存する 質問する

CoreData内の管理対象オブジェクトの列挙状態を保存したい

enum ObjStatus: Int16 {
    case State1 = 0
    case State2 = 1
    case State3 = 3
}

class StateFullManagedObject: NSManagedObject {
    @NSManaged var state: Int16
}

最後のステップは、StateFullManagedObjectの状態変数をObjStatusに変換して直接比較することですが、これはうまくいきません。たとえば、Int16とInt16列挙型の間で==演算子を使用することはできません。私が受け取ったコンパイル時エラーは次のとおりです。

Int16 は 'MirrorDisposition' に変換できません

以下の条件を参照してください。

var obj: StateFullManagedObject = // get the object

if (obj.state == ObjStatus.State1) { // Int16 is not convertible to 'MirrorDisposition'

}

Int16 と enum を比較/割り当てるにはどうすればよいでしょうか?

ベストアンサー1

enum を @objc として宣言できます。すると、すべて自動的に動作します。以下は、私が取り組んでいるプロジェクトからの抜粋です。

// Defined with @objc to allow it to be used with @NSManaged.
@objc enum AgeType: Int32
{
    case Age                = 0
    case LifeExpectancy     = 1
}

/// The age type, either Age or LifeExpectancy.
@NSManaged var ageType: AgeType

Core Data モデルでは、ageType は Integer 32 型に設定されています。

おすすめ記事