在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
这样可以,还是有更好的架构方法?
答案 0 :(得分:1)
我会这样做:
class MyHealthStore:HKHealthStore {
static let sharedInstance = MyHealthStore()
}
现在您可以使用MyHealthStore.sharedInstance
,它将始终返回同一商店。
您也可以在没有任何子类化的情况下实现相同的目标:
class MyCustomClass:NSObject {
static let sharedInstance = MyCustomClass()
let healthStore = HKHealthStore()
}
现在您可以使用MyCustomClass.sharedInstance.healthStore
答案 1 :(得分:0)
在应用中拥有一个单例HKHealthStore
实例而不对其进行子类化(Apple不鼓励)或创建一个虚拟类的更干净,更快捷的方法是通过简单的扩展:
extension HKHealthStore {
static let shared = HKHealthStore()
}
这样您就可以简单地实现..
HKHealthStore.shared.requestAuthorization(...)
HKHealthStore.shared.execute(query)
就是这样。