繁体   English   中英

如何将Realm Object类添加到RLMArray

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM