Apple CoreData 模板中的属性声明

Posted

技术标签:

【中文标题】Apple CoreData 模板中的属性声明【英文标题】:Property Declarations in Apple CoreData Templates 【发布时间】:2014-06-13 05:09:24 【问题描述】:

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

【问题讨论】:

【参考方案1】:

没有创建两个属性 - 一个是存储的属性,一个是计算的属性。模式是:

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

【讨论】:

感谢您的回复。这对我来说很清楚。所以你不能同时使用一个方法/函数/属性吗?计算一个属性,如果它没有被创建,并存储它以备下次使用? @lazy 怎么样?还是不存储属性??抱歉有这些问题。我想我可以复制并粘贴该样板代码,但我想了解...再次感谢。 A @lazy 确实会导致存储属性;该属性的值是在第一次访问惰性属性时计算的。正如您所指出的,他们的样板代码中使用的 Apple 模式适用于 @lazy。见上面的编辑。 非常感谢。很好的帮助 不客气。将不胜感激“答案复选标记”。您可能会考虑将标题更改为更具描述性 - “Apple CoreData 模板中的属性声明”也许? 我对堆栈溢出很陌生,一旦我获得足够的声誉,我会添加一个复选标记。谢谢。

以上是关于Apple CoreData 模板中的属性声明的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的 CoreData:如何清楚地获取属性?

存储的属性需要一个初始值或者应该是@NSManaged

Apple 的 Cloudkit 迁移

Core Data 教程过时了?

com.apple.CoreData.SQLDebug 标志未显示 SQL

来自 com.apple.xpc.activity.com.apple.cloudkit.scheduler.com.apple.coredata.cloudkit.activity.export 的