我刚才注意到Swift <a href="" class="btn btn-white dropdown-toggle" dropdown-toggle>
{{vm.selectedRotation}}
<span class="caret"></span>
</a>
的{{1}}成员隐含static
。
例如,这只会调用structs
一次:
lazy
这背后的理由是什么?
如果我想要相反的行为怎么办?
答案 0 :(得分:76)
static
属性定义了一个“类型属性”,一个实例化一次且仅一次。正如你所注意到的,这种情况很懒散,因为静态就像全局变量一样。正如The Swift Programming Language: Properties所说:
总是以与Lazy Stored Properties类似的方式懒惰地计算全局常量和变量。与延迟存储的属性不同,全局常量和变量不需要使用
lazy
修饰符进行标记。
这种隐含的懒惰行为是因为,Swift Blog: Files and Initialization表示:
它允许自定义初始化程序,Swift中的启动时间干净利落,没有全局初始化程序来减慢速度,执行顺序完全可以预测。
他们有意识地设计了这种方式,以避免不必要地延迟应用程序的启动。
如果要在应用程序的某个特定位置实例化static
属性(而不是将其推迟到第一次使用的位置),只需在前一点和对象上引用此static
属性即可。将在那时初始化。鉴于我们在减少启动应用程序的延迟方面所付出的努力,您通常不会在应用程序的首次启动期间同步,但您可以随时随地进行此操作。