【问题标题】:Swift: Problems Related to Nested Generic Helper Functions for RealmSwift:与 Realm 的嵌套通用辅助函数相关的问题
【发布时间】:2016-09-26 03:56:27
【问题描述】:

刚开始使用Realm的swift框架,不知道有没有漏掉什么,但是我觉得通过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'")

我有这个错误:无法将类型“STUser.Type”的值转换为预期的参数类型“Object”,其中 STUser 继承自 Realm 的 Object 类。

我不确定哪一步是错误的,我非常感谢它的建议和帮助!提前致谢!

【问题讨论】:

    标签: swift generics realm


    【解决方案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'")
    

    【讨论】:

    • 谢谢!实际上,我昨天才了解元类型,所以它并没有自然而然地出现在我身上。现在我学会了一个新技巧!
    【解决方案2】:
    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'")
    

    【讨论】:

      猜你喜欢
      • 2013-11-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多