Swift:为什么从NSManagedObject继承会破坏我的属性?

时间:2016-08-19 15:05:57

标签: ios swift core-data nsmanagedobject

我是一个完整的Swift / IOS新手,还有一些关于CoreData的东西,我根本无法理解。

我有一个类,其中包含一些由指定的初始值设定项初始化的非可选属性。然后,如果我将该类设置为从NSManagedObject继承,那么我突然得到错误

Stored property X requires an initial value or should be @NSManaged.

为什么Swift突然认为我的属性没有被初始化,即使它们显然是?

另外,我读到@NSManaged"告诉编译器,属性的存储和实现将由CoreData"处理,但这甚至意味着什么?

任何答案都将不胜感激..

1 个答案:

答案 0 :(得分:2)

实际上,我昨天正在阅读这篇文章。

  

是的,它实际上就像@dynamic一样 - 技术上可能是这样   甚至相同。在语义上有一点点差异:

     

@dynamic说'编译器,不要检查我的属性是否也是   实现。可能没有你能看到的代码,但我保证   将在运行时'

工作      

@NSManaged现在说'编译器,不要像我一样检查这些属性   核心数据负责实施 - 它将在那里   运行时“

     

所以你甚至可以说:@NSManaged是一个更多的语法糖   动态的缩小版:)

取自question

swift的最大推动力是使语言非常安全,就像在这种情况下,检查属性是否在编译时实现。如果我理解正确,CoreData不完全符合这些编译时间检查,因此添加@NSManaged可以让编译器知道变量将被处理。

来自Apple

  

使用@NSManaged属性通知Swift编译器   核心数据提供了声明的存储和实施   运行时。