Swift中隐式懒惰的静态成员

我只是注意到Swift结构的静态成员是隐式的.

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

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

var z = Foo.bar
z = Foo.bar

这背后的理由是什么?

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

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

Global constants and variables are always computed lazily,in a similar manner to 07001. Unlike lazy stored properties,global constants and variables do not need to be marked with the lazy modifier.

这种隐含的懒惰行为是因为,正如Swift Blog: Files and Initialization所说:

it allows custom initializers,startup time in Swift scales cleanly with no global initializers to slow it down,and the order of execution is completely predictable.

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

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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...