【问题标题】:Create singleton instance via extension per app?通过每个应用程序的扩展创建单例实例?
【发布时间】:2016-02-24 01:13:39
【问题描述】:

Apple documentation 中,它说某些实例需要为每个应用创建一次,例如 HKHealthStore:

每个应用只需要一个 HealthKit 商店。这些是长寿的对象。创建一次商店,并保留参考以供以后使用。

是在做安全下面这样方便的事情还是有更好的方法?

public extension HKHealthStore {

    class var sharedInstance: HKHealthStore? {
        if !HKHealthStore.isHealthDataAvailable() {
            return nil
        }

        struct Singleton {
            static let instance = HKHealthStore()
        }

        return Singleton.instance
    }

}

这样我就可以做到这一点而不会污染自定义管理器: HKHealthStore.shareInstance?.requestAuthorizationToShareTypes

这样可以吗,还是有更好的架构方法?

【问题讨论】:

  • 在同一个文档中,Apple 说:Like many classes in HealthKit, the HKHealthStore class should not be subclassed.

标签: ios swift swift2 ios9


【解决方案1】:

我会这样做:

class MyHealthStore:HKHealthStore {
    static let sharedInstance = MyHealthStore()
}

现在你可以使用MyHealthStore.sharedInstance,它总是返回同一个商店。

你也可以在没有任何子类的情况下实现同样的效果:

class MyCustomClass:NSObject {
    static let sharedInstance = MyCustomClass()
    let healthStore = HKHealthStore()
}

现在你可以使用MyCustomClass.sharedInstance.healthStore

【讨论】:

  • 在同一个文档中,Apple 说:Like many classes in HealthKit, the HKHealthStore class should not be subclassed.
  • Cool thx,我仍然喜欢使用扩展,因为我不必引入新类。我们可以利用已有的东西。
  • 你可能是对的。但是,您也可以考虑创建一个有用的单例类而不是我说明的虚拟类的可能性。例如,此类可以持有并负责您在应用程序中需要的所有与健康相关的任务。在这种情况下,您可以将所有逻辑移入其中,并在其他类中使用非常简单的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 2011-11-18
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多