当前位置:  开发笔记 > IOS > 正文

Swift中隐式懒惰的静态成员

如何解决《Swift中隐式懒惰的静态成员》经验,为你挑选了1个好方法。

我只是注意到staticSwift的成员structs是含蓄的lazy.

例如,这只会调用init一次:

class Baz {
    init(){
        print("initializing a Baz")
    }
}
struct Foo {
    static let bar = Baz()
}

var z = Foo.bar
z = Foo.bar

这背后的理由是什么?

如果我想要相反的行为怎么办?



1> Rob..:

static属性定义了一个"类型属性",一个实例化一次且仅一次.正如你所注意到的,这种情况很懒散,因为静态就像全局变量一样.正如The Swift Programming Language:Properties所说:

全局常量和变量总是懒惰地计算,与Lazy Stored Properties类似.与延迟存储的属性不同,全局常量和变量不需要使用lazy修饰符标记.

这种隐含的懒惰行为是因为,正如Swift博客:文件和初始化所说:

它允许自定义初始化程序,Swift中的启动时间干净利落,没有全局初始化程序来减慢它,并且执行顺序是完全可预测的.

他们有意识地设计它以避免不必要地延迟应用程序的启动.

如果要static在应用程序中的某个特定点实例化该属性(而不是将其推迟到首次使用的位置),只需static在该较早的位置引用此属性,该对象将在此时初始化.鉴于我们在减少启动应用程序的延迟方面所付出的努力,您通常不会在应用程序的首次启动期间同步,但您可以随时随地执行此操作.


这很懒惰.我已经更新了我的答案以澄清这一点.
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有