在类中初始化属性,特定的延迟属性?

时间:2015-09-03 15:06:59

标签: swift properties initialization lazy-loading

  1. 在swift中,当我声明该类的实例时,类中的属性是否已初始化?

  2. 懒惰属性在被调用/使用之前不会被初始化(如果我错了,请纠正我),所以基本上声明一个类的实例不会初始化延迟属性但会初始化常规属性如果有的话(叫做存储,我相信)?

  3. 最后,书中说下面的实例是"声明" AND"初始化" .......我可以看到它已被声明,但它是如何被初始化" ??在括号之间没有发送参数??

    let someClass = SomeClassWithLazyVar()
    

2 个答案:

答案 0 :(得分:2)

  1. 是的,这是正确的。
  2. 是的,这也是正确的。
  3. 正在初始化的是常量someClass声明是在程序中引入新的命名值。您声明常量(或变量)的名称并标识其类型:

    let someClass: SomeClassWithLazyVar

  4. 但此时它还没有初始化。您可以通过为常量赋值来初始化常量:

    someClass = SomeClassWithLazyVar()
    

    绝大部分时间(特别是常量)你声明常量并同时初始化它:

    let someClass = SomeClassWithLazyVar()
    

    是否需要在括号内传递参数取决于您正在创建的对象的初始值设定项。我假设SomeClassWithLazyVar有一个不带参数的初始化器,如下所示:

    init() { }
    

答案 1 :(得分:1)

  1. 是(仅“常规”存储属性 - 这不适用于计算属性和延迟属性)。即使在创建类的实际实例时也会分配默认值。

  2. 是。 Apple Documentations说:

  3.   

    惰性存储属性是一个属性,其初始值在第一次使用之前不会计算。通过在声明之前编写惰性修饰符来指示延迟存储的属性。

    1. 你粘贴的是“构造函数调用”。当您编写name_of_class()时,您实际上正在创建该类的实例(并在之后立即调用其init()方法)。因此,正在使用所述实例初始化someClass