使全局变量不懒惰
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(_:)" 并使用它来初始化全局变量并断言是否调用了此方法。
我正在 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(_:)" 并使用它来初始化全局变量并断言是否调用了此方法。