据我所知(参见参考文献A),静态属性启动器是惰性的,我在office documents
找到了以下描述您必须始终将惰性属性声明为变量(使用var 关键字)因为它的初始值可能直到之后才被检索 实例初始化完成。常量属性必须始终 在初始化完成之前有一个值,因此不能 宣称是懒惰的。
从上面的信息来看,我认为我无法将静态属性定义为常量变量而且我进行了试用,结果证明我可以做到这一点而不会触发编译器的任何错误。
示例:
class Person {
static let firstNaID = "First Name"
static let lastNaID = "Last Name"
}
问题:这是Swift 3.0.1的错误还是我错了。
参考A :Neuburg。 M.2016。 IOS 10使用Swift编程基础。 P127
感谢您的时间和帮助
答案 0 :(得分:2)
Neuburg M.在静态属性和实例属性之间是drawing a distinction。你假装忽略这种区别。但你不能忽视它;它们是完全不同的东西,用于不同的目的。
在此代码中:
class Person { // let's declare a static property
static let firstNaID = "First Name"
}
... firstNaID
已经懒惰。但现在尝试这样做:
class Person { // let's declare an instance property
lazy let firstNaID : String = "First Name" // error
}
你不能;事情就是这样(通过Swift 3.1),你不得不说lazy var
- 当你这样做时,你得到一个懒惰的实例属性。
因此,static let
声明无法完成lazy let
想要完成的任务,因为静态属性不是实例属性。
答案 1 :(得分:1)
您正在谈论类型属性
的相同章节输入属性
...类型属性对于定义对特定类型的所有实例都是通用的值很有用,例如所有实例都可以使用的常量属性...
存储的类型属性可以是变量或常量。计算类型属性始终声明为变量属性,与计算实例属性的方式相同。
请注意
...
存储类型属性在首次访问时会被懒惰地初始化。它们只保证初始化一次,即使同时由多个线程访问,也不需要使用延迟修饰符标记。