PersonクラスとしてRealmオブジェクトとして以下のようなものを定義していて、APIサーバーからPersonにデータをmappingさせて利用しています。
Swift
1class Person: Object { 2 dynamic var id: Int = 0 3 dynamic var email: String? = "" 4 dynamic var name: String = "" 5 6 override class func primaryKey() -> String? { 7 return "id" 8 } 9 10 init(_id: Int, _email: String?, _name: String) { 11 id = _id 12 email = _email 13 name = _name 14 super.init() 15 } 16 17 required init() { 18 super.init() 19 } 20 required init(realm: RLMRealm, schema: RLMObjectSchema) { 21 super.init(realm: realm, schema: schema) 22 } 23 24 required init(value: AnyObject, schema: RLMSchema) { 25 super.init(value: value, schema: schema) 26 } 27}
一方で、Personクラスの配列を返すAPIのエンドポイントを用意して、PersonsというRealmオブジェクトを作りたいと思っています。
Swift
1class Persons: Object { 2 var persons: RLMArray = RLMArray(objectClassName: "Person") 3 4 init(_persons: [Person]?) { 5 let personsRLMArray = RLMArray(objectClassName: "Person") 6 if _persons != nil { 7 for person in _persons! { 8 personsRLMArray.addObject(person) 9 } 10 } 11 persons = personsRLMArray 12 super.init() 13 } 14 15 required init() { 16 super.init() 17 } 18 required init(realm: RLMRealm, schema: RLMObjectSchema) { 19 super.init(realm: realm, schema: schema) 20 } 21 22 required init(value: AnyObject, schema: RLMSchema) { 23 super.init(value: value, schema: schema) 24 } 25}
APIの返り値はRLMArrayではなくNSArrayなので、initの中で新しくRLMArrayを宣言して、for文でaddObjectさせています。
すると、Cannot convert value of type 'Person' to expected argument type 'RLMObject' というエラーが出ます。
PersonをObjectの継承ではなく RLMObjectの継承として定義すれば上記はエラーが消えるのですが、それで問題ないのでしょうか。RealmSwiftでRLMObjectを使わない方がいいというのを聞いたこともあるため、できれば避けておきたいと思っています。
RLMObjectを使う方法以外で、回避策はありませんでしょうか。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/06 11:14