使用Realm.io保持Swift枚举

Swift枚举是将语义赋予非自解释属性的好方法。 如果使用得当,它们为我们提供了更具可读性的代码库,以及一种无需查看文档即可快速选择正确值的方法。

你更喜欢哪个?

后者立即讲述了整个故事,不是吗? 但是,由于它是一个自定义枚举,而不是原子类型,因此Realm无法立即存储它。 但是不要担心,这很容易解决!

如何使用Realm存储枚举

这里的想法是为我们的枚举提供自定义的getter和setter方法,并将原子表示形式存储在Realm中。

这是我们的示例枚举,它枚举了所有任务类型:

现在,由于我们无法将TaskType对象存储在Realm存储区中,因此我们必须存储某种标识符,以后可以将其转换为枚举表示形式。

TaskType方便地是Int的枚举,这意味着我们可以只存储其rawValue 。 但是,如果我们拥有Realm不支持的类型的枚举(例如UInt ),则我们可以选择存储枚举值的索引或为每个枚举分配一个可以存储的标识符。

为了存储表示,我们将创建一个私有变量,该变量将包含标识符和一个公共变量(Realm不会尝试持久化),以及一组访问器,以使用持久化变量进行相应的操作。

如您所见,我们将与Realm兼容的privateType保留为私有,以确保我们使用支持枚举的type变量。

type变量定义的getter和setter负责将存储的标识符转换为我们的枚举,反之亦然。