iOS Swift4 - 重新初始化惰性变量

时间:2017-11-20 19:30:27

标签: ios swift lazy-initialization

有没有办法根据当前语言重新初始化惰性变量?

lazy var localizableDictionary: NSDictionary! = {
    guard let path = Bundle.main.path(
        forResource: "Localizable",
        ofType: "strings",
        inDirectory: nil,
        forLocalization: Localizer.shared.currentLanguage)
    else {
        fatalError("Localizable file NOT found")
    }

    return NSDictionary(contentsOfFile: path)
}()

1 个答案:

答案 0 :(得分:2)

它的lazy var显然是一个变量,因此如果有必要,Swift不会阻止你在任何时间修改它的值。

你可以简单地说,

guard let path = Bundle.main.path(
    forResource: "Localizable",
    ofType: "strings",
    inDirectory: nil,
    forLocalization: Localizer.shared.currentLanguage)
    else {
        fatalError("Localizable file NOT found")
}
self.localizableDictionary = NSDictionary(contentsOfFile: path)

<强> FYI

  

延迟初始化(有时也称为惰性实例化,或者是懒惰的   loading)是一种延迟创建对象或某些对象的技术   其他昂贵的过程,直到它需要。在为iOS编程时,   这有助于确保您仅使用所需的内存   你需要它。

http://mikebuss.com/2014/06/22/lazy-initialization-swift/

复制的上述报价

如果你真的需要一个常数,请不要认为lazy var是常数,你会选择立即让它:)

希望有所帮助