如何将Realm Object类添加到RLMArray中

时间:2016-06-04 11:18:21

标签: ios swift realm

我有一个继承Realm Object的Person类,它从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,则错误消失,但我不确定这是否是正确的方法。 有没有其他方法可以避免这种错误?

还有很多类似的问题,但我找不到相同的问题。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您使用Realm with Swift,则应使用List<Object>代替RLMArray。所以正确的语法是:

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

List<Object>表现为原生Swift Array。它是可变的,您可以使用它上面的功能方法来过滤或映射数据。

如果您需要有关Realm列表的更多信息,我建议checking this out

相关问题