在Swift中,我们需要初始化延迟存储的属性吗?

时间:2014-06-05 13:36:57

标签: swift

在Apple的新Swift编程语言中,我遇到了以下内容:

" 在创建该类或结构的实例时,类和结构必须将其所有存储的属性设置为适当的初始值。存储的属性不能处于不确定状态。"

即使对于@lazy Stored Properties,上述规则是否也有效?

3 个答案:

答案 0 :(得分:2)

不,你没有:

  

惰性存储属性是一个属性,其初始值在第一次使用之前不会计算...

     

您必须始终将惰性属性声明为变量(使用var   关键字),因为它的初始值可能直到之后才被检索   实例初始化完成...

     

当属性的初始值为时,延迟属性很有用   取决于外部因素,其值直到a之后才知道   实例的初始化已完成。

Source

基本上意味着它没有值,并且在初始化后不需要立即。

答案 1 :(得分:2)

延迟属性必须具有初始化程序。

enter image description here

但是,通过将它们标记为@lazy,初始化程序的值仅在需要时计算。

class DataImporter{}

class DataManager {
    @lazy var importer:DataImporter = DataImporter()
}

var dm = DataManager()

// do stuff with dm and other lines of code

// later if you reference dm.importer
dm.importer // <-- at this moment the call to DataImporter is made

答案 2 :(得分:1)

这样想:延迟存储的属性 do 有一个初始值,它还没有计算出来。

您描述的规则意味着对象必须自己确定初始值,在init返回后无法指定,例如由工厂。对于惰性存储属性也是如此。