我是一个完整的Swift / IOS新手,还有一些关于CoreData的东西,我根本无法理解。
我有一个类,其中包含一些由指定的初始值设定项初始化的非可选属性。然后,如果我将该类设置为从NSManagedObject继承,那么我突然得到错误
Stored property X requires an initial value or should be @NSManaged.
为什么Swift突然认为我的属性没有被初始化,即使它们显然是?
另外,我读到@NSManaged"告诉编译器,属性的存储和实现将由CoreData"处理,但这甚至意味着什么?
任何答案都将不胜感激..
答案 0 :(得分:2)
是的,它实际上就像@dynamic一样 - 技术上可能是这样 甚至相同。在语义上有一点点差异:
@dynamic说'编译器,不要检查我的属性是否也是 实现。可能没有你能看到的代码,但我保证 将在运行时'
工作@NSManaged现在说'编译器,不要像我一样检查这些属性 核心数据负责实施 - 它将在那里 运行时“
所以你甚至可以说:@NSManaged是一个更多的语法糖 动态的缩小版:)
取自question
swift的最大推动力是使语言非常安全,就像在这种情况下,检查属性是否在编译时实现。如果我理解正确,CoreData不完全符合这些编译时间检查,因此添加@NSManaged
可以让编译器知道变量将被处理。
来自Apple:
使用@NSManaged属性通知Swift编译器 核心数据提供了声明的存储和实施 运行时。