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 型に設定されています。