LoginSignup
1
5

More than 3 years have passed since last update.

Realmでenumを使うときメモ

Posted at

結論

privateプロパティのときは@objcMembersを書いていても@objcを書かないとだめ

これでいけそうだけどだめで

@objcMembers
class Phone: Object {

    dynamic var name = ""
    private dynamic var osTypeRawValue = "" // privateの場合は@objcMembersを書いてあってもこれじゃだめ
    var type: OSType {
        get { return OSType(rawValue: osTypeRawValue) ?? .undefind }
        set { osTypeRawValue = newValue.rawValue }
    }

    enum OSType: String {
        case ios
        case android
        case undefind
    }
}

こうするとOK

@objcMembers
class Phone: Object {

    dynamic var name = ""
    @objc private dynamic var osTypeRawValue = "" // @objcを明示的につける
    var type: OSType {
        get { return OSType(rawValue: osTypeRawValue) ?? .undefind }
        set { osTypeRawValue = newValue.rawValue }
    }

    enum OSType: String {
        case ios
        case android
        case undefind
    }
}

こんな感じでenumが使える

let phone = Phone()
phone.type = .ios
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5