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

时间:2016-12-12 06:49:20

标签: ios swift lazy-loading lazy-evaluation lazy-initialization

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

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

.
.
.

然而,这个解决方案看起来很难看。有更干净的方式吗?我可以使用某种初始化回调吗?

1 个答案:

答案 0 :(得分:4)

好吧,我似乎找到了一个可行的解决方案来解决我自己的问题。

  1. 确保该类是NSObject
  2. 的子类
  3. 插入以下代码:
  4. override class func initialize() { 
         _ = myObserver
    }
    

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

    当然,这种方法受限于这样一个事实,即类必须是NSObject的子类,这对于所有这些类都是不可能的。这种方法的任何其他潜在缺点都会受到欢迎!