回顾一下apple提供的样板代码,用于在swift中构建核心数据堆栈,我发现堆栈中的每个项目都有两个变量,例如: managedObjectModel和_managedObjectModel。我的理解是,属性的内部存储变量是由swift在内部创建和管理的,那么为什么我们必须手动创建一个呢?为什么我们不能创建一个属性,如果在调用它时不存在,则让swift处理创建过程。提前谢谢。
答案 0 :(得分:4)
未创建两个属性 - 一个是存储属性,另一个是计算属性。模式是:
class Foo {
var _bar : Bar
var bar : Bar { return _bar }
}
存储了var _bar
但计算了var bar
。特定的Apple模式用于懒惰地初始化存储的属性,如:
class Foo {
var _bar : Bar? = nil
var bar : Bar {
if _bar == nil {
/* compute some stuff */
_bar = Bar (/* ... */)
}
return _bar!
}
}
以上内容与@lazy property
非常相似。你可以用:
class Foo {
@lazy var bar : Bar = computeBar ()
func computeBar () -> Bar {
/* compute some stuff */
return Bar (/* ... */)
}
}