gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:55:41 37 4
gpt4 key购买 nike

我有一个继承 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com