惰性变量正常实例化和闭包实例化有什么区别?


lazy var propertyOne: BabyYoda = BabyYoda(delegate: self.mandalorian)

与。

lazy var propertyTwo: BabyYoda = {return BabyYoda(delegate: self.mandalorian)}()

一个比另一个更有效率吗?它们是否编译为完全相同的代码? 我知道propertyTwo允许额外的代码行(例如,在BabyYoda对象中设置其他东西(,但这是我能想到的唯一区别。

第二种语法,我称之为"定义和调用",是使用几行代码初始化实例属性的合法方法。

请注意,就其本身而言,这些都与lazy无关,这与您提出的特定问题无关。lazy实际上只是使在这种情况下说self.mandalorian属性初始值设定项合法的一种方式。这很有趣,但这是完全不同的事情。

最新更新