繁体   English   中英

通过扩展为每个应用创建单例实例吗?

[英]Create singleton instance via extension per app?

Apple文档中 ,它说每个实例(例如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

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

我会这样:

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

现在,您可以使用MyHealthStore.sharedInstance ,它将始终返回同一商店。

您也可以在没有任何子类的情况下实现相同的目的:

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

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

通过简单的扩展,可以在应用程序中创建子类HKHealthStore实例而不对其进行子类化(Apple不鼓励)或创建虚拟类的更干净,更快捷的方法:

extension HKHealthStore {
    static let shared = HKHealthStore()
}

这样您就可以简单地..

HKHealthStore.shared.requestAuthorization(...)
HKHealthStore.shared.execute(query)

就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM