【问题标题】:How to pass realm.objects(SomeObject.self).filter() to a function that needs Results<Object>如何将 realm.objects(SomeObject.self).filter() 传递给需要 Results<Object> 的函数
【发布时间】:2018-01-06 13:22:11
【问题描述】:

这个问题与RealmSwift Cannot cast Results<SomeOjbect> to Results<Object>结合在一起

我有一个像这样的领域对象:

import RealmSwift
class SomeObject: Object
{
    @objc dynamic var datetime = ""
    @objc dynamic var city = 0

    convenience init(city: Int, datetime: String)
    {
        self.init()
        self.city = city
        self.datetime = datetime
    }
}

有一个框架:https://github.com/danielgindi/ChartsRealm,它从 Realm 中拉取数据并绘制图表。该框架是用 Swift 编写的,也可以在 Objc 中使用,因此它结合了 RLMObjectObject 类型。

它的功能如下:

public convenience init(results: Results&lt;Object&gt;?, xValueField: String?, yValueField: String, label: String?)

这需要Results&lt;Object&gt;?,但是我无法将我的过滤结果设为Results&lt;Object&gt; 类型。例如

realm.objects(SomeObject.self).filter("city=0")

它是Results&lt;SomeObject&gt;,不能转换成Results&lt;Object&gt;,在RealmSwift Cannot cast Results<SomeOjbect> to Results<Object>中描述

我该如何解决?

由于ChartsRealm框架中的demo,它只是简单的从+ (RLMResults *)allObjectsInRealm:(RLMRealm *)realm;的Realm中读取所有对象,但在现实世界中,我们通常需要先过滤结果。

如果我真的无能为力,我可以接受修改框架功能参数,为框架提交拉取请求,只是为了让它工作。

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

    Results&lt;Object&gt; 作为一种类型没有任何意义,ChartsRealm 中的方法应该是采用Results&lt;T&gt; 的泛型方法。

    因为在这种特定情况下,ChartsRealm 对Results&lt;Object&gt; 所做的所有事情都是使用ObjectiveCSupport.convert() 来获得RLMResultsunsafeBitCast()Results&lt;Object&gt; 应该可以正常工作。您也可以自己调用 ObjectiveCSupport.convert() 并将 ChartsRealm 传递给 RLMResults 而不是 Swift Results 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多