使一个globale变量不是懒惰的

时间:2016-04-24 10:51:33

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

我在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
    }

    ....

}

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

THX

1 个答案:

答案 0 :(得分:1)

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

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