我是Swift / IOS的新手,而CoreData有一些我根本无法理解的东西。
我有一个带有一些非可选属性的类,这些类由指定的初始化程序初始化。然后,如果我将该类设置为继承自NSManagedObject,则突然出现错误
Stored property X requires an initial value or should be @NSManaged.
为什么Swift突然认为我的属性没有初始化,即使它们显然是未初始化的?
另外,我读到@NSManaged“告诉编译器属性的存储和实现将由CoreData处理”,但这甚至意味着什么?
任何答案将不胜感激..
昨天我实际上只是在阅读有关此内容的信息。
是的,它的行为确实类似于@dynamic-从技术上讲,它甚至可能是相同的。在语义上有细微的差别:
@dynamic说“编译器,不要检查我的属性是否也已实现。您可能看不到任何代码,但我保证它将在运行时正常工作。
@NSManaged现在说“编译器,请不要检查那些属性,因为我有Core Data来负责实现-它会在运行时在那儿”
所以你甚至可以说:@NSManaged是语法糖,它是dynamic的更狭窄版本:)
取自这个问题
迅速采取的最大措施是使语言非常安全,在这种情况下,请检查属性是否在编译时实现。如果我理解正确,CoreData并不太符合这些编译时检查,因此添加进来@NSManaged
可使编译器知道将要处理这些变量。
从苹果公司:
您可以使用@NSManaged属性来通知Swift编译器Core Data在运行时提供了声明的存储和实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句