使全局变量不懒惰

Make a globale variable not lazy

我正在 Swift 中构建一个 library,它有一个全局变量(全局变量会自动惰性初始化)。初始化这个变量大约需要一秒钟。我的问题是,我想在应用程序加载时初始化变量,这样用户就不必稍后等待。我目前的做法是:

My ViewController:

override func viewDidLoad() {

    ...

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), {
        let _ = Foo()
    })
}

My Framework File:

let myGlobalVariable = bar()

class Foo {
    public init() {
        myGlobalVariable
    }

    ....

}

但是这种方法并不像它那样快速。如何以正确的方式初始化变量?

感谢

没有 swift 方法可以 "when" 你应该在你的框架中初始化全局变量,这取决于你的框架的流程,你的框架中的任何东西都不会被调用,直到它被使用,没有 "FrameworkDidLaunch" 方法,它是一个 "static" 代码,就像任何其他 类 但在另一个模块中,它甚至可以只是一堆资源 ...

如果您想确保有人按照您的意图使用您的框架,然后将其写入文档 and/or 添加一个必须在使用前调用的静态方法,例如 "MyFramwork.startMyFramework()" 或者如果您需要来自用户的一些信息,例如 API Key "MyFramwork.setApiKey(_:)" 并使用它来初始化全局变量并断言是否调用了此方法。