【问题标题】:Swift Realm - get types of all database objectsSwift Realm - 获取所有数据库对象的类型
【发布时间】:2022-09-23 05:39:52
【问题描述】:

我的领域数据库中有一个各种对象的列表,所有这些对象都是默认创建的 ClassName: Object 类。有没有办法获取这些对象的类型(类名),可以保存为变量,或者创建这些类型的枚举?

  • 为了清楚起见;您是说您在数据库中创建了 Realm 对象,但您不知道它们是什么类?通常,如果代码中没有对象模型,则无法实例化 Realm 对象。你能澄清一下被问到什么吗?
  • 我已经创建了 Realm 对象,并且我确切地知道它们是什么类,但我希望将这些类类型放在一个地方,例如数组或枚举,以便我可以使用它们来进行 switch 或 if 语句或快速迭代它们
  • 好吧,这可以工作,但可能不像你想象的那样。让我发布一个答案,看看是否有帮助。

标签: ios swift xcode realm


【解决方案1】:

问题是 Realm Results 对象是同质的——它们只包含一种对象类型。这意味着您永远不会遇到结果同时包含 PersonDog 类的情况。

话虽如此,我们可以选择使用领域AnyRealmValue

让我设置一下:假设你有一个 PersonClass 和一个 DogClass

let dog = DogClass()
let person = PersonClass()

和一个可以包含 AnyRealmValue 的 List 类

class MyClass: Object {
   @Persisted var myList = List<AnyRealmValue>()
}

然后需要将这些对象强制转换为 AnyRealmValue 以使其工作

let obj0: AnyRealmValue = .object(dog)
let obj1: AnyRealmValue = .object(person)

我们将它们添加到列表中

let m = MyClass()
m.myList.append(obj0)
m.myList.append(obj1)

您提到了switch,但这里有一个简单的 if...then 子句以不同方式处理它们 - 取决于类

if let person = item.object(PersonClass.self) {
   print("is a person")
} else if let dog = item.object(DogClass.self) {
   print("is a dog")
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2017-12-11
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多