我在各种场合都遇到了这个关键字。我有点知道它应该做什么。但我真的想更好地理解它。
根据重复使用的经验而非文档,我注意到了 @NSManaged
:
- 它神奇地替换了键值编码。
- 它与 Objective-C 中的
@dynamic
大致等价(而我对此并不了解太多) - 我需要它来从
Parse SDK
继承PFObject
。通常,它使用 KVC 从后端读取/写入值。 - 在变量前加上任何前缀,只要有
@NSManaged
,当我没有在初始化器中初始化时,编译器就会闭嘴。
正式定义(Core Data Apple 文档中):
Core Data 为 NSManagedObject 类的子类提供了属性的底层存储和实现。在托管对象子类中,为每个属性定义之前添加 @NSManaged 属性,该属性对应于 Core Data 模型中的属性或关系。与 Objective-C 中的 @dynamic 属性一样,@NSManaged 属性告诉 Swift 编译器属性的存储和实现将在运行时提供。但是,与 @dynamic 不同,@NSManaged 属性仅适用于 Core Data 支持。
我从中得到的:
带有
@NSManaged
的变量应该从编译时检查 某些 东西中豁免出来。
我已经阅读了正式文档和其他各种关于此问题的 SO 问题:
@synthesize vs @dynamic, what are the differences?
What is common case for @dynamic usage?
我本能地认识到了一些我应该使用它的情况。我部分知道它的作用。但我所追求的是更纯粹的理解。
进一步观察:
Parse SDK
中的 PFObject
依赖于键值编码来访问其值。 PFObject
提供以下访问器:
objectForKey:
let score = results.objectForKey("descriptionOfResult")
//returns the descriptionOfResult value from the results object
setObject:forKey:
results.setObject("The results for a physics exam", forKey: "descriptionOfResult")
//sets the value of descriptionOfResult
据我理解,@NSManaged
神奇地理解到我声明的变量自动使用上面的访问器来get
和set
。如果我所理解的是正确的,我想知道它是如何做到这一点的,以及它还能做什么。