【问题标题】:Design Pattern for Realm Database Swift 3.1 - Singleton领域数据库 Swift 3.1 的设计模式 - 单例
【发布时间】:2016-03-22 03:47:49
【问题描述】:

我正在研究RealmSwift,它是 Swift 中 CoreData/SQLite 的现代数据库替代品。

我想知道如何实现Class 的设计,它可以管理/处理RealmSwift Framework 的所有查询

这个问题有点类似于实现 SQLite 模型管理器,但针对的是 RealmSwift。

具体来说,我不需要上面提到的单例对象/实例。

【问题讨论】:

标签: ios swift swift3 swift2 realm


【解决方案1】:

Realm 有一个相当聪明的内部缓存系统,每次像 let realm = try! Realm() 这样的调用发生时,以前的 Realm 实例都会被保留并回收。因此,没有必要,也不建议尝试将 Realm 实例本身合并到单例中。

如果您想大量自定义 Realm 实例的设置,您通常会通过 Realm Configuration 对象来实现,该对象是静态的和线程安全的。如果是这种情况,当您需要创建一个新的 Realm 实例时,使用返回适当的 Configuration 对象的单例(甚至只是一个静态类方法)会更合适。

that thing in swift 有一个关于如何在 Swift 中创建单例的页面,它本质上只是一个类实现的单个静态属性:

class SomeManager {
    static let sharedInstance = SomeManager()
}

【讨论】:

  • 还建议使用私有 init() 来限制 SomeManager 类的多个实例化。否则你的班级不是真正的单身人士。
  • @TiM 我需要一个管理类的实现想法,该类将用于处理与 Realm 相关的所有查询
  • 我创建了一个 RealmManager 类(数据库管理器),它的所有调用都与领域有关。例如,getUserInfo、saveUserInfo。我不允许领域接触这个类之外的任何东西,我使用类 func 我为每个函数实例化领域,而不是为整个管理器实例化一个共享领域单例实例。我遇到了一个疯狂的问题,如果我链接这些函数(对象在另一个领域实例中打开),一个对象可以绑定到以前的领域实例。由于您无法手动关闭领域,因此此时将其变成单例是否可以?
【解决方案2】:

在一种情况下使用枚举:

enum Singleton: Protocols {
    case instance
    /// methods
}

像这样使用:

Singleton.instance.method(args)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多