Ios 斯威夫特:为什么继承NSManagedObject会毁掉我的财产?

Ios 斯威夫特:为什么继承NSManagedObject会毁掉我的财产?,ios,swift,core-data,nsmanagedobject,Ios,Swift,Core Data,Nsmanagedobject,我是一个完全的Swift/IOS新手,CoreData有些东西我简直无法理解 我有一个类,它具有一些非可选属性,这些属性由指定的初始值设定项初始化。然后,如果我将该类设置为从NSManagedObject继承,那么我会突然发现错误 Stored property X requires an initial value or should be @NSManaged. 为什么斯威夫特突然认为我的属性没有初始化,即使它们显然是初始化的 另外,我读到@NSManaged“告诉编译器属性的存储和实现将

我是一个完全的Swift/IOS新手,CoreData有些东西我简直无法理解

我有一个类,它具有一些非可选属性,这些属性由指定的初始值设定项初始化。然后,如果我将该类设置为从NSManagedObject继承,那么我会突然发现错误

Stored property X requires an initial value or should be @NSManaged.
为什么斯威夫特突然认为我的属性没有初始化,即使它们显然是初始化的

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


任何答案都将不胜感激。

事实上,我昨天刚刚读到这篇文章

是的,它有点像“动态”——从技术上讲可能是这样 一模一样。在语义上有一点不同:

@dynamic说“编译器,不要检查我的属性是否也 执行。你可能看不到任何代码,但我保证 将在运行时运行

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

所以你甚至可以说:@NSManaged是语法上的糖,这是一个更复杂的概念 动态的狭义版本:)

摘自

swift的最大作用是使语言非常安全,就像在本例中一样,检查属性是否在编译时实现。如果我理解正确,CoreData并不完全符合这些编译时检查,因此添加
@NSManaged
可以让编译器知道变量将得到处理

发件人:

您可以使用@NSManaged属性通知Swift编译器 核心数据在以下位置提供声明的存储和实现: 运行时


我写了一条很长的评论,但删除了它——这些小小的、迅速的怪事正慢慢开始被人们所理解。那么,您的意思是NSManagedObject导致其子类无法确定属性是否真的在子类中实现了?考虑到触发此警告的是。。。属性是否已实现。好的,假设我将这些属性设置为@NSManaged。我还需要做什么?我如何“在运行时实现这些属性”,考虑到他的整个事情都是无稽之谈,而且这些属性实际上是实现的?:-)我认为这与swift编译器如何处理选项有关。Swift是一种类型安全语言,CoreData堆栈仍在obj-c中,这在技术上是不安全的,而
@NSManaged
是连接这两个世界的一种方式。这是我的理解,但我希望得到比我聪明得多的人的验证。我想你可能对实现有误解。声明了变量并不意味着实现了它。当swift编译器查看变量时,它必须是可选的或设置的。两个中的一个。
NSMangedObject
子类没有现成的功能,因为它是从类型不安全的obj-c基继承的。您可以使用@NSManaged属性通知Swift编译器核心数据在运行时提供声明的存储和实现@用户884248希望对您有所帮助!这是否与Objective-C使用单独的头文件和代码文件有关?(=单独的接口和实现?)。这很有帮助。您是否添加了核心数据堆栈和模型的任何其他部分?为什么希望此类成为托管对象?