如何防止在 Swift 中延迟加载静态变量

How to prevent lazy loading of static variables in Swift

我写了一个 Swift 实用程序 class,我在其中定义了几个静态方法和一个私有静态常量。但是,我希望在第一次引用 class 之后 立即 加载此常量,而不是延迟加载。我唯一能想到的就是在每个静态函数中引用静态常量,如下所示:

private static let myObserver: Observer = {
    let observer = Observer(actionToPerform: foo1)
    SomeOtherClass.register(observer)
    return observer
}()

static func foo1() {
    _ = myObserver
    ...
}

static func foo2() {
    _ = myObserver  
    ...
}

static func foo3() {
    _ = myObserver
    ...
}

//even more of a hassle:
static let myIntConstant: Int = {
    _ = myObserver
    return 5
} ()

.
.
.

但是,该解决方案看起来很丑陋。有没有更清洁的方法?我可以使用某种 class 初始化回调吗?

好的,我似乎找到了解决我自己问题的可行方法。

  1. 确保 class 是 NSObject 的子class。
  2. 插入以下代码:

override class func initialize() { 
     _ = myObserver
}

执行此操作后,根据需要在引用 class 后立即加载静态常量。

当然,这种方法的局限性在于 class 必须是 NSObject 的子class,这可能不适用于所有此类 class是的。欢迎使用此方法的任何其他潜在缺点!