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:如何清楚地获取属性?
com.apple.CoreData.SQLDebug 标志未显示 SQL
来自 com.apple.xpc.activity.com.apple.cloudkit.scheduler.com.apple.coredata.cloudkit.activity.export 的