在 Swift 中理解单例

Understanding Singleton in Swift

我正在尝试在 SWIFT 中创建一个单例,这是我目前所做的

class Global {

    class var sharedInstance:Global {

        struct singleton {

            static let instance:Global = Global()
        }

        return singleton.instance
    }


}

var a = Global.sharedInstance
var b = Global()

if a === b {

    println("Pointing to Same Instance")
}
else {

    println("Pointing to different instance")
}

我已经使用计算类型属性创建了一个单例(从另一个 Whosebug 问题中了解到)。截至目前,输出是 "Pointing to different instance"。

我正在寻找的是上面示例中的 "a" 和 "b" 指向 GLOBAL class 的不同实例,这打破了单例的要点。如何使上面示例中的 "a" 和 "b" 指向 class 的同一个实例。

谢谢

此模式不保证 Global class 只会出现一个实例。它只允许任何人通过 sharedinstance 属性.

访问 Global 的单个公共实例

因此 Global() 声明了 Global class 的新实例。但是 Global.sharedinstance 不会创建 Global 的新实例,只是获取一个预先创建的实例(这是在任何人第一次访问它时创建的)。

(如果您将 b 的声明更改为 var b = Global.sharedinstance,您会看到它确认 ab 指向同一实例。)

如果您想禁止创建 Global 的更多实例,请将其 init 设为私有:

    private init() {  }

但请记住,您仍然可以从声明它的文件中创建其他 Globals,因此如果您在 playground 或单文件测试项目中执行上述操作,你不会看到任何效果。

Class App 生命周期内实例一次。

class AccountManager {
    static var sharedInstance = AccountManager()
    var userInfo = (ID:"Arjun",Password:"123")

    private init(){
       print("allocate AccountManager")
    }
}

这里我们设置Private 因为:

私有访问将实体的使用限制为封闭声明,以及同一文件中该声明的扩展。当这些细节仅在单个声明中使用时,使用私有访问来隐藏特定功能的实现细节。

同时设置 sharedInstance

static 属性

因为如果你需要在没有 class 实例的情况下访问 class 属性 你必须声明 "Static".