【问题标题】:What is the difference between lazy var normal instantiation and closure instantiation?惰性 var 正常实例化和闭包实例化有什么区别?
【发布时间】:2020-04-24 11:39:06
【问题描述】:
lazy var propertyOne: BabyYoda = BabyYoda(delegate: self.mandalorian)

对比

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

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

【问题讨论】:

标签: swift closures lazy-initialization


【解决方案1】:

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

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

【讨论】:

  • 我想我对编译后的 LLVM 位码之间的差异更好奇。我会检查自己,但我不知道如何查看/查找 Xcode 生成的位码。但是从您的回答和 Rob 的评论来看,我的理解是,我使用哪种语法实际上并不重要,一个看起来比另一个更忙。此外,初始化时对 self 的依赖非常有趣(我不确定是好是坏)
  • 我们都没有说过这实际上并不重要,尤其是对于您提供的实际代码。创建和调用函数意味着开销。
  • 对自我的依赖与问题无关,正如我告诉你的那样。但这就是为什么你必须使用lazy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-20
  • 1970-01-01
  • 2013-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多