我在Swift中建立一个library,它具有一个全局变量(全局变量会自动初始化为lazy)。初始化此变量大约需要一秒钟。我的问题是,我想在加载应用程序时初始化变量,以便用户不必稍后再等待。我当前的方法是这样的:

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
    }

    ....

}

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

谢谢

最佳答案

没有“何时”在框架中初始化全局变量的快速方法,这取决于框架的流程,在使用框架之前,不会调用框架中的任何内容,没有“FrameworkDidLaunch”方法,这是“静态”代码就像其他任何类一样,但是在另一个模块中,它甚至可能只是一堆资源...

如果您要确保有人按照您的意图使用框架,然后在文档中编写框架和/或添加一个在使用前必须调用的静态方法,例如“MyFramwork.startMyFramework()”,或者您需要从中获取一些信息API密钥“MyFramwork.setApiKey(_ :)”这样的用户,并使用它来初始化全局变量并断言是否调用了此方法。

关于ios - 使全局变量不偷懒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36822143/

10-13 06:35
查看更多