我刚刚开始使用Realm的快速框架,不确定我是否遗漏了什么,但我认为通过领域API查询数据的方式非常麻烦,所以我想写一个帮手它的功能。
但是当我玩它的泛型函数时,我遇到了一些问题。
所以这是辅助函数:
static func queryFromRealm<T: Object>(object: T, query: String) -> Results<T> {
let realm = try! Realm()
return realm.objects(T.self).filter(query)
}
realm.objects(type :)是Realm的函数,它采用泛型类型参数:
public func objects<T: Object>(_ type: T.Type) -> Results<T> {
return Results<T>(RLMGetObjects(rlmRealm, (type as Object.Type).className(), nil))
}
但是当我调用这个辅助方法时:
let currentUser = STHelpers.queryFromRealm(object: STUser, query: "uid = 'xxxxx'")
我有这样的错误:无法转换类型&#39; STUser.Type&#39;的值预期的参数类型&#39;对象&#39;,其中STUser继承自Realm的Object类。
我不确定哪一步出错了,我真的很感激它的建议和帮助!!提前谢谢!
答案 0 :(得分:1)
let currentUser = STHelpers.queryFromRealm(STUser(), query: "uid = 'xxxxx'")
但是,我不认为你的代码非常好。
我的代码:
static func queryFromRealm<T: Object>(type: T.Type, query: String) -> Results<T> {
let realm = try! Realm()
return realm.objects(type).filter(query)
}
和
let currentUser = STHelpers.queryFromRealm(STUser.self, query: "uid = 'xxxxx'")
答案 1 :(得分:1)
为什么不直接使用类型作为参数?
static func queryFromRealm<T>(type: T.type, query: String) -> Results<T> {
let realm = try! Realm()
return realm.objects(type).filter(query)
}
然后您可以使用
调用该函数let currentUser = STHelpers.queryFromRealm(Student.self, query: "uid = 'xxxxx'")