类单例的初始化不能自动完成

Li *_*min 1 singleton initialization ios swift

我做了一个类单例如下:

class AccountManager
{
    static let sharedInstance = AccountManager()

    private init(){
        print("init is done if this message shows up")
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为init一旦我启动应用程序,该方法就会自动实现,而无需AccountManager.sharedInstance先在某个地方调用,但实际上它不会,除非AccountManager.sharedInstance首先专门调用。

这种行为正常还是我做错了什么?

Mar*_*n R 5

静态类型属性被延迟初始化(并且仅一次),即它在第一次访问时初始化,例如,如果您调用

let manager = AccountManager.sharedInstance
Run Code Online (Sandbox Code Playgroud)

或者

AccountManager.sharedInstance.someMethod()
Run Code Online (Sandbox Code Playgroud)

Swift没有提供在运行时自动执行代码的机制。

在 Objective-C 中,您可以实现一个+ (void)load;在类加载到内存中时运行的方法,这在 Swift 中是不允许的。