lazy property
语法有两种不同的使用方式,我看不出它们之间的区别:
//1
lazy var a = { "hello" }()
//2
lazy var b = "hello"
换句话说,你为什么会或不会使用
{}()
它们之间有区别还是只是做同样的事情看起来不同?
没有太大区别。
lazy
不关心你是否用闭包初始化属性。 lazy
只是使属性延迟初始化,即在第一次访问属性时评估初始化表达式(=
之后的部分)。该表达式可以是任何东西:字符串文字,或立即调用的闭包,或任何你喜欢的东西。
所以这里的区别只是评估
"foo"
和{ "foo" }()
的区别。前者只是一个字符串文字,而后者调用一个闭包,并且该闭包返回相同的字符串。所以这是一点点开销,如果你使用-O
,那将完全被优化掉。使用 Godbolt.org,您可以验证使用 -O
时的程序集输出是否相同: String literal | 关闭