2016-06-04 11 views
0

Ich habe eine Person-Klasse hinzuzufügen, die Realm Objekt erbt und es wird Daten von API-ServerWie Realm Objektklasse in RLMArray

class Person: Object { 
    dynamic var id: Int = 0 
    dynamic var email: String? = "" 
    dynamic var name: String = "" 

    override class func primaryKey() -> String? { 
     return "id" 
    } 

    init(_id: Int, _email: String?, _name: String) { 
     id = _id 
     email = _email 
     name = _name 
     super.init() 
    } 

    required init() { 
     super.init() 
    } 
    required init(realm: RLMRealm, schema: RLMObjectSchema) { 
     super.init(realm: realm, schema: schema) 
    } 

    required init(value: AnyObject, schema: RLMSchema) { 
     super.init(value: value, schema: schema) 
    } 
} 

Auf der anderen Seite habe ich auch einen Endpunkt haben, der eine NSArray von Person zurückgibt Klasseninstanzen, und ich möchte die Daten der Personenklasse wie unten zuordnen.

class Persons: Object { 
    var persons: RLMArray = RLMArray(objectClassName: "Person") 

    init(_persons: [Person]?) { 
     let personsRLMArray = RLMArray(objectClassName: "Person") 
     if _persons != nil { 
      for person in _persons! { 
       personsRLMArray.addObject(person) 
      } 
     } 
     persons = personsRLMArray 
     super.init() 
    } 

    required init() { 
     super.init() 
    } 
    required init(realm: RLMRealm, schema: RLMObjectSchema) { 
     super.init(realm: realm, schema: schema) 
    } 

    required init(value: AnyObject, schema: RLMSchema) { 
     super.init(value: value, schema: schema) 
    } 
} 

Da dieser Endpunkt NSArray zurückgibt, nicht RLMArray, ich brauche eine RLMArray zu erklären und jedes Element des NSArray in die RLMArray im init hinzufügen.

Dann bekomme ich einen Fehler wie, „Can not Wert vom Typ umwandeln‚Person‘zu erwarten Argument Typ‚RLMObject‘“

Wenn ich die Person, die Elternklasse RLMObject ändern, nicht Objekt, der Fehler verschwindet aber Ich bin mir nicht sicher, ob es der richtige Weg ist. Gibt es eine andere Möglichkeit, diese Art von Fehler zu vermeiden?

Es gibt viele ähnliche Fragen, aber ich konnte nicht die gleiche finden.

Vielen Dank im Voraus!

Antwort

1

Wenn Sie Realm mit Swift verwenden, sollten Sie List<Object> anstelle von RLMArray verwenden. So korrekte Syntax wäre:

var persons = List<Person>() 
persons.append(somePerson) 

List<Object> verhält sich als native Swift Array. Es ist änderbar und Sie können funktionale Methoden verwenden, um die Daten zu filtern oder zuzuordnen.

Wenn Sie weitere Informationen über Realm-Listen benötigen, empfehle ich checking this out.

+0

Danke! es funktioniert perfekt !! – Dave