About
RealmのフィールドにはEnum的な型のサポートはありませんが、フィールド値をEnumとして扱えた方が、プログラムの記述がスッキリすることが多いと思います。
色々と試行錯誤した結果、RealmObjectへのEnumの取り込み方は、このような感じに落ち着きました。
必ずtypeAsEnum
プロパティを使うように気を付ける必要があったり、rawValueへのアクセサが隠蔽されていなかったりはしますが、switchのコーディングが楽になりました。
Java
public class Item extends RealmObject {
public enum Type { TYPE1, TYPE2 }
// 用途に応じてintでも良い
private String type = Type.TYPE1.name();
/** typeをEnumで扱うためのIgnoredプロパティ */
@Ignore
private Type typeAsEnum;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Type getTypeAsEnum() {
return Type.valueOf(getType());
}
public void setTypeAsEnum(Type typeAsEnum) {
setType(typeAsEnum.name());
}
}
以下は利用例です。
// getter
switch (item.getTypeAsEnum()) {
case Type1:
break;
case Type2:
break;
}
// setter
item.setTypeAsEnum(Type.Type1);
Swift
class Item : RLMObject {
enum Type : String {
case Type1 = "Type1"
case Type2 = "Type2"
}
// 用途に応じてIntでも良い
dynamic var type: String = Type.Type1.rawValue
/// typeをEnumで扱うためのプロパティ
var typeAsEnum {
get {
return Type(rawValue: type)!
}
set {
type = newValue.rawValue
}
}
}
以下は利用例です。
// getter
switch item.typeAsEnum {
case .Type1:
case .Type2:
}
// setter
item.typeAsEnum = .Type1