为什么Singleton的Initializer中的代码在应用程序启动时没有执行



上下文

我有一个Singleton,它应该在它的私有初始化器中执行一些设置逻辑。但是,此代码不会在应用程序启动时执行。


代码

class SomeViewModel: ObservableObject {
static let shared = SomeViewModel()
private init() {
fatalError() // Just to test whether the Code gets executed.
}
}

问题

  • 应用程序不会因Fatal Error而崩溃,即使在执行初始值设定项时也会发生这种情况。为什么会发生这种情况

static let是懒惰的。在第一次调用访问shared属性之前,它不会被初始化。所以你的应用程序不会崩溃,除非你这样做:

let x = SomeViewModel.shared

最新更新