RealmSwift无法施展结果 到结果 (RealmSwift Cannot cast Re

2019-10-28 17:09发布

RealmSwift版本:最新主分支

所以我有一个域对象,如:

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
    }
}

有一个FUNC调用,比如

static func createlineData(from results: Results<Object>?) -> LineChartData

现在我取得一些成果,并传递给createLineData

let realm = try! Realm()
let results = realm.objects(SomeObject.self).filter("city = \(city.rawValue)")
let lineData = createlineData(from: results as? Results<Object>)

编译器警告我说,类型转换总是失败:

从结果<“SomeObject”>到不相关类型的结果<“对象”>投总是失败

我很困惑,因为SomeObject只是一个子类。 我怎样才能解决这个问题? 提前致谢。

更新:

我想要做的是,的帕拉姆

static func createlineData(from results: Results<Object>?) -> LineChartData

永远不能改变,所以我需要基于查询到FILT city是枚举,它们传递到createlineData(from results: Results<Object>?)像访问其他属性datetime以后createlineData ,从Results<Object>

Answer 1:

在斯威夫特,每一属类表示了自己的类型,即使你有一个泛型类在泛型类型参数是具有超作为其泛型参数的其他泛型类的子类,这两个泛型类不会通过继承与。

这就是为什么你可以不投Results<SomeObject>Results<Object>尽管SomeObject是的子类Object

下面是表示与泛型类相同的问题,一个简单的例子:

class A{}
class B:A{}

class GenericClass<T> {
    let val:T

    init(val:T) {
        self.val = val
    }
}

let genericA = GenericClass<A>(val: A())
let genericB = GenericClass<B>(val: B())

let upcasted = genericB as? GenericClass<A> //warning: Cast from 'GenericClass<B>' to unrelated type 'GenericClass<A>' always fails

另外, Results在类型Realm是均匀的集合类型,所以不能存储的不同的子类Object在相同的Results对象,所以铸造Results<Object>就没有意义反正。 如果你需要存储相同的集合中,从不同的领域模型类的对象,你将需要牺牲的自我更新性质Results ,并坚持使用存储在你的对象Array的实例。



文章来源: RealmSwift Cannot cast Results to Results
标签: ios swift realm