ios - 如何将 Realm 对象类添加到 RLMArray

标签 ios swift realm

我有一个继承 Realm 对象的 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,错误就会消失,但我不确定这是正确的做法。 有没有其他方法可以避免这种错误?

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

提前致谢!

最佳答案

如果你在 Swift 中使用 Realm,你应该使用 List<Object>而不是 RLMArray .所以正确的语法是:

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

List<Object>表现得像原生 Swift Array .它是可变的,您可以对其使用函数式方法来过滤或映射数据。

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

关于ios - 如何将 Realm 对象类添加到 RLMArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37629547/

相关文章:

ios - 从应用程序启动警报警报

ios - 如何将我的 xml 文件转换为 kml 文件

ios - 单击时 Swift 代码不会将我带到错误行

swift - 根据段显示正确的文本颜色?

ios - Realm 迁移失败,错误为 : Migration Required, 或对象已使用不同的架构版本打开

c# - MonoTouch.Dialog:响应 RadioGroup 选择

html - iPhone 在 Safari 中不显示字体

ios - 如何更改搜索栏的高度? swift

swift - 序列化具有自定义类的可选属性的最佳方法

ios - Swift 无法将类型的值转换为 Realm 中的预期参数