簡體   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