gpt4 book ai didi

ios - RealmSwift 无法将结果 转换为结果
转载 作者:行者123 更新时间:2023-11-28 15:08:11 24 4
gpt4 key购买 nike

RealmSwift 版本:最新的 master 分支

所以我有一个像这样的 Realm 对象:

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

有一个像

这样的函数调用
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>)

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

Cast from Results<"SomeObject"> to unrelated type Results<"Object"> always fails

我很困惑,因为 SomeObject只是一个子类。我该如何解决?提前致谢。

更新:

我想做的是,参数

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

永远无法更改,所以我需要查询以根据 city 进行过滤这是枚举,将它们传递给 createlineData(from results: Results<Object>?) ,并访问其他属性,如 datetime稍后在 createlineData , 来自 Results<Object>

最佳答案

在 Swift 中,每个泛型类都代表它自己的类型,即使你有一个泛型类,其中泛型类型参数是另一个以父类(super class)作为泛型参数的泛型类的子类,这两个泛型类也不会通过继承相关。

这就是为什么你不能施放 Results<SomeObject> 的原因至 Results<Object>尽管SomeObjectObject 的子类.

这是一个简单的例子,用泛型类来表示同样的问题:

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>无论如何都没有意义。如果您需要将来自不同 Realm 模型类的对象存储在同一个集合中,您将需要牺牲 Results 的自更新特性。并坚持将您的对象存储在 Array 中例如。

关于ios - RealmSwift 无法将结果 <SomeOjbect> 转换为结果 <Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48125923/

24 4 0