如何防止在 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 初始化回调吗?
好的,我似乎找到了解决我自己问题的可行方法。
- 确保 class 是
NSObject
的子class。
- 插入以下代码:
override class func initialize() {
_ = myObserver
}
执行此操作后,根据需要在引用 class 后立即加载静态常量。
当然,这种方法的局限性在于 class 必须是 NSObject
的子class,这可能不适用于所有此类 class是的。欢迎使用此方法的任何其他潜在缺点!
我写了一个 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 初始化回调吗?
好的,我似乎找到了解决我自己问题的可行方法。
- 确保 class 是
NSObject
的子class。 - 插入以下代码:
override class func initialize() {
_ = myObserver
}
执行此操作后,根据需要在引用 class 后立即加载静态常量。
当然,这种方法的局限性在于 class 必须是 NSObject
的子class,这可能不适用于所有此类 class是的。欢迎使用此方法的任何其他潜在缺点!