class中属性的初始化,lazy属性具体在哪?
Initialization of properties in a class, lazy properties in specific?
在 swift 中,当我声明 class 的实例时,class 中的属性是否已初始化?
惰性属性在 called/used 之前不会初始化(如果我错了请纠正我),所以基本上声明 class 的实例不会初始化惰性属性,但如果有任何属性(我相信称为存储),将初始化常规属性?
最后,书上说下面的实例是 "declared" AND "initialized".......我可以看到它已被声明,但它是如何被声明的"initialized"??括号之间没有发送参数??
let someClass = SomeClassWithLazyVar()
是(仅 "regular" 存储属性 - 这不适用于计算属性和惰性属性)。甚至只有在创建 class 的实际实例时才会分配默认值。
是的。苹果文档说:
A lazy stored property is a property whose initial value is not calculated until the first time it is used. You indicate a lazy stored property by writing the lazy modifier before its declaration.
- 你粘贴的是"constructor call"。当您编写
name_of_class()
时,您实际上是在创建 class 的实例(并在之后立即调用其 init()
方法)。因此 someClass
正在使用所述实例进行初始化。
- 是的,没错。
- 是的,这也是正确的。
正在初始化的是常量someClass
。 声明 是在您的程序中引入一个新的命名值。您声明常量(或变量)的名称并标识其类型,如下所示:
let someClass: SomeClassWithLazyVar
但那时它还没有初始化。您通过给常量赋值来初始化常量:
someClass = SomeClassWithLazyVar()
绝大多数情况下(尤其是常量)您声明常量并同时初始化它:
let someClass = SomeClassWithLazyVar()
是否需要在括号内传递参数取决于您正在创建的对象的初始值设定项。我假设 SomeClassWithLazyVar
有一个不带参数的初始化器,像这样:
init() { }
在 swift 中,当我声明 class 的实例时,class 中的属性是否已初始化?
惰性属性在 called/used 之前不会初始化(如果我错了请纠正我),所以基本上声明 class 的实例不会初始化惰性属性,但如果有任何属性(我相信称为存储),将初始化常规属性?
最后,书上说下面的实例是 "declared" AND "initialized".......我可以看到它已被声明,但它是如何被声明的"initialized"??括号之间没有发送参数??
let someClass = SomeClassWithLazyVar()
是(仅 "regular" 存储属性 - 这不适用于计算属性和惰性属性)。甚至只有在创建 class 的实际实例时才会分配默认值。
是的。苹果文档说:
A lazy stored property is a property whose initial value is not calculated until the first time it is used. You indicate a lazy stored property by writing the lazy modifier before its declaration.
- 你粘贴的是"constructor call"。当您编写
name_of_class()
时,您实际上是在创建 class 的实例(并在之后立即调用其init()
方法)。因此someClass
正在使用所述实例进行初始化。
- 是的,没错。
- 是的,这也是正确的。
正在初始化的是常量
someClass
。 声明 是在您的程序中引入一个新的命名值。您声明常量(或变量)的名称并标识其类型,如下所示:let someClass: SomeClassWithLazyVar
但那时它还没有初始化。您通过给常量赋值来初始化常量:
someClass = SomeClassWithLazyVar()
绝大多数情况下(尤其是常量)您声明常量并同时初始化它:
let someClass = SomeClassWithLazyVar()
是否需要在括号内传递参数取决于您正在创建的对象的初始值设定项。我假设 SomeClassWithLazyVar
有一个不带参数的初始化器,像这样:
init() { }