[英]How to add Realm Object class into RLMArray
我有一个Person类,它继承了Realm Object,它从API服务器获取数据
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)
}
}
另一方面,我还有一个端点,它返回一个Person类的NSArray实例,我想将数据映射到Persons类,如下所示。
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)
}
}
由于此端点返回NSArray而不是RLMArray,因此我需要声明一个RLMArray并将NSArray的每个元素添加到init的RLMArray中。
然后,我收到一个错误,例如“无法将类型为“ Person”的值转换为预期的参数类型为“ RLMObject””
如果将Person的父类更改为RLMObject,而不是Object,则错误消失了,但是我不确定这是正确的方法。 还有其他方法可以避免这种错误吗?
有很多类似的问题,但我找不到相同的问题。
提前致谢!
如果您将Realm与Swift一起使用,则应使用List<Object>
而不是RLMArray
。 因此正确的语法为:
var persons = List<Person>()
persons.append(somePerson)
List<Object>
行为类似于本机Swift Array
。 它是可变的,您可以在其上使用功能方法来过滤或映射数据。
如果您需要有关Realm列表的更多信息,建议您进行检查 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.