Swift中的单例和类属性

时间:2016-06-30 11:35:47

标签: ios swift swift2 singleton

我正在尝试创建一个单例类。为此,我尝试使用两种不同的方法,即

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.第二种方法 - Employee2类包含两个类属性,即

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

这两种使单身人物等效的方法吗?如果是的话,我应该使用哪一个,以及单身人士之间的差异是什么?

3 个答案:

答案 0 :(得分:3)

这两种方法并不等同:

  • 第一种方法是创建Employee对象
  • 实例
  • 第二种方法定义了两个类字段;它不会创建任何对象实例。

换句话说,只有第一种方法才能创建单身人士。第二种方法在类级别创建相关字段的集合。

答案 1 :(得分:2)

要在Swift中创建一个简单的单一类,你可以写:

class SomeManager {
    static let sharedInstance = SomeManager()
}

<强>用法

SomeManager.sharedInstance

这是什么意思?

由于 Swift 1.2 ,它可以声明静态类属性。所以你可以像这样实现单例。在它存在的应用程序的生命周期中只能有一个实例。存在单例来给我们提供单一的全局状态。

第一种方法是创建一个单一的,具有初始化的类:Employee(firstName: "Payal", lastName: "Gupta")

第二种方法不创建单一的方法,是一个带有两个静态声明属性的简单类。

答案 2 :(得分:0)

试试这个......

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
        }
    }