将 ={}() 与惰性属性一起使用或仅使用 =

问题描述 投票:0回答:1

lazy property
语法有两种不同的使用方式,我看不出它们之间的区别:

//1
lazy var a = { "hello" }()

//2
lazy var b = "hello"

换句话说,你为什么会或不会使用

{}()
它们之间有区别还是只是做同样的事情看起来不同?

swift properties lazy-initialization
1个回答
0
投票

没有太大区别。

lazy
不关心你是否用闭包初始化属性。
lazy
只是使属性延迟初始化,即在第一次访问属性时评估初始化表达式(
=
之后的部分)。该表达式可以是任何东西:字符串文字,或立即调用的闭包,或任何你喜欢的东西。

所以这里的区别只是评估

"foo"
{ "foo" }()
的区别。前者只是一个字符串文字,而后者调用一个闭包,并且该闭包返回相同的字符串。所以这是一点点开销,如果你使用
-O
,那将完全被优化掉。使用 Godbolt.org,您可以验证使用
-O
时的程序集输出是否相同: String literal | 关闭

© www.soinside.com 2019 - 2024. All rights reserved.