Apple CoreData模板中的属性声明

时间:2014-06-13 05:09:25

标签: ios core-data swift

回顾一下apple提供的样板代码,用于在swift中构建核心数据堆栈,我发现堆栈中的每个项目都有两个变量,例如: managedObjectModel和_managedObjectModel。我的理解是,属性的​​内部存储变量是由swift在内部创建和管理的,那么为什么我们必须手动创建一个呢?为什么我们不能创建一个属性,如果在调用它时不存在,则让swift处理创建过程。提前谢谢。

1 个答案:

答案 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 (/* ... */)
  }
}