[英]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.