簡體   English   中英

Swift中的Singleton和Class屬性

[英]Singleton and Class Properties in Swift

我正在嘗試創建一個單例課程。 為此,我嘗試使用兩種不同的方法,即

1.首先方法- Employee類包含兩個實例屬性,包含類和私人初始化,即共享實例類屬性

class Employee
{
    var firstName : String
    var lastName : String

    static let sharedInstance = Employee(firstName: "Payal", lastName: "Gupta")

    private init(firstName : String, lastName : String)
    {
        self.firstName = firstName
        self.lastName = lastName
    }
}

2.Second方法- Employee2類包含兩個類的屬性,即

class Employee2
{
    static var firstName : String = "SomeFirsrName"
    static var lastName : String = "SomeLastName"
}

這兩種使單例相等的方法嗎? 如果是,我應該使用哪一個?就單例而言,它們之間有什么區別?

這兩種方法不等效:

  • 第一種方法創建Employee對象的實例
  • 第二種方法定義了兩個類字段; 它不會創建任何對象實例。

換句話說,只有第一種方法會創建一個單例。 第二種方法在類級別收集相關字段。

要在Swift中創建一個簡單的單調類,您可以編寫:

class SomeManager {
    static let sharedInstance = SomeManager()
}

用法

SomeManager.sharedInstance

這是什么意思?

Swift 1.2開始 ,可以聲明靜態類屬性。 因此,您可以像這樣實現單例。 在存在的應用程序生命周期中,只能有一個實例。存在單例以提供單一的全局狀態。

第一種方法使用此初始化創建具有類的Employee(firstName: "Payal", lastName: "Gupta")

第二種方法不創建單調,它是一個具有兩個靜態聲明屬性的簡單類。

嘗試這個...

class Employee : NSObject
    {
        var firstName : String
        var lastName : String
        class var sharedInstance: Employee {
            struct Static {
                static let instance: Employee = Employee(firstName: "Payal", lastName: "Gupta")
            }
            return Static.instance
        }

        private init(firstName : String, lastName : String)
        {
           self.firstName = firstName
           self.lastName = lastName
        }
    }

暫無
暫無

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

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