Swift:与领域的嵌套通用助手函数相关的问题

时间:2016-09-26 03:56:28

标签: swift generics realm

我刚刚开始使用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类。

我不确定哪一步出错了,我真的很感激它的建议和帮助!!提前谢谢!

2 个答案:

答案 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'")