developer tip

Realm 모델의 속성으로 열거 형 사용

copycodes 2020. 12. 3. 08:02
반응형

Realm 모델의 속성으로 열거 형 사용


모델의 속성으로 Enum을 사용할 수 있습니까? 현재 다음과 같은 수업이 있습니다.

class Checkin: RLMObject {
  dynamic var id: Int = 0
  dynamic var kind: String = "checked_in"
  var kindEnum: Kind = .CheckedIn {
    willSet { self.kind = newValue.rawValue }
  }

  enum Kind: String {
    case CheckedIn = "checked_in"
    case EnRoute = "en_route"
    case DroppedOff = "dropped_off"
  }
  ....
}

잘 작동하지만 kind속성을 Enum으로 만들고 Realm .rawValue이 객체를 저장소에 저장할 때 속성을 자동으로 호출 하도록하고 싶습니다 . Realm에서 이것이 가능합니까 아니면 이미 거기에 기능 요청이 있습니까?


kindEnum이 경우의 setter 및 getter를 재정의해야합니다 .

enum Kind: String {
  case CheckedIn
  case EnRoute
  case DroppedOff
}

class Checkin: Object {
  @objc dynamic var id = 0
  var kind = Kind.CheckedIn.rawValue
  var kindEnum: Kind {
    get {
      return Kind(rawValue: kind)!
    }
    set {
      kind = newValue.rawValue
    }
  }
}

이 모델을 좀 더 다듬 었습니다.

enum Thing: String {
    case Thing1
    case Thing2
    case Thing3
}

그런 다음 Realm 클래스 객체에서 :

class myClass : Object {
    private dynamic var privateThing = Thing.Thing1.rawValue
    var thing: Thing {
        get { return Thing(rawValue: privateThing)! }
        set { privateThing = newValue.rawValue }
    }
}

이를 통해

myClassInstance.thing = .Thing1

( "Thing1"을 privateThing에 저장), 그러나

myClassInstance.privateThing = "Thing4"

유효한 값이 아니므로 데이터 무결성을 유지합니다.


Realm은 Objective-C 열거 형을 지원하고 표현할 Int있기 때문에 다음을 사용할 수 있습니다.

class Checkin: Object {
  dynamic var id: Int = 0
  dynamic var kind: Kind = .checkedIn

  @objc enum Kind: Int {
    case checkedIn
    case enRoute
    case droppedOff
  }
  ....
}

If you need to parse to/from String you can use a custom initializer for Kind and an toString function.

There is a discussion about this in GitHub

This works with Swift 3.0 and Realm 2.0.2

참고URL : https://stackoverflow.com/questions/29123245/using-enum-as-property-of-realm-model

반응형