簡體   English   中英

我可以將參數傳遞給 Swift 中的 Singleton 類嗎? 和一般的單例使用

[英]Can I pass parameters to a Singleton class in Swift? And general Singleton use

是否可以將參數傳遞給單例類? 如果是這樣怎么辦?

這是我的單例類之一的片段:

class NotificationManager: NSObject {

static let sharedManager = NotificationManager()
var tabBarController: UITabBarController!

private override init() {
    super.init()
}

在這個 Singleton 的情況下,公共屬性tabBarController在使用之前必須始終設置。

我想知道是否可以在啟動時傳遞正確的UITabBarcontroller對象,因為我認為這是在實例化我的 Singleton 類時? 這將防止該類被錯誤地實現。 並不是說我曾經期望這會成為一個問題。

另外,在這種情況下使用 Singleton 類是否完全可以? 管理一組特定的操作? 過去我總是傳遞對象,尤其是managedObjectContext ,但是現在我發現單例類可以使大型應用程序中的一切變得更干凈、更好和更安全(因為只有一種立場)。 我可以理解在類之間傳遞對象對於較小的應用程序很好,但是一旦它們變大它就會變得非常混亂。

在我最近的應用程序中,我還在 iOS 和 watchOS 應用程序之間使用了一個共享的 Singleton 類,它定義了一些全局變量,例如服務器端點和環境。 這似乎是定義需要此訪問權限的變量的最佳方式。

我有朋友告訴我單身人士不好用,而且從我的谷歌搜索結果來看,它真的是喜憂參半。 就我而言,它們使我的代碼更易於管理和處理。

謝謝。

您可以隨意設置單例。 您只需要更改它的初始化/組織方式。 這個問題中有一些例子。 對於該模式的一些一般評論,您可以在此處閱讀

我個人的觀點是,避免單身通常是好的,但有時它們是必要的。 然而,我傾向於說單例應該只在應用程序啟動時可以初始化(應用程序委托)時使用,並且可以/應該在整個應用程序的整個生命周期中使用和活躍。

我會警告不要使用與您的用戶界面有關的單例。 看來您正在捕獲一個 UITabBarController。 我強烈建議不要這樣做,而是使用委托或 通知來響應事件。 這部分是因為一般的設計怪異,但它也使應用程序恢復和應用程序的內存占用變得復雜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM