cfi*_*her 0 cocoa core-data nsmanagedobject swift
如果我尝试将存储的属性添加到NSManagedObjectSwift 中的子类,而不为其提供默认值(请注意,我将在初始化程序中执行此操作),我会收到此错误:
Stored property 'foo' requires an initial value or should be @NSManaged
Run Code Online (Sandbox Code Playgroud)
代码如下:
class Thing : NSManagedObject{
var foo : String
var bar : String
init(foo: String, bar : String){
// blah, blah...
}
}
Run Code Online (Sandbox Code Playgroud)
强制执行的原因是什么?为什么我不能在初始化程序中初始化???
编辑:以下答案适用于多种情况,并与此相关,但并未完全解决这种NSManagedObject情况。在 的情况下NSManagedObject,可以从持久存储加载对象并进行初始化,而无需调用您的特殊 init。Swift 不知道它应该分配什么,foo并且bar在这些情况下,因此需要一些默认值(而不是仅使用final或required在其他子类化情况下可以执行的操作)。
所以正确的问题是:你希望 Core Data 做什么foo以及bar何时从数据存储中加载这个对象?
因为编译器无法证明所有子类都会实现或调用init(foo,bar). 如果子类没有实现该初始化器,则foo或bar可能不会被初始化。
您可以通过多种方式解决此问题。您可以提供默认值。您可以使这些值显式地展开可选项(使其成为默认值nil)。您可以将这些值设为可选。您可以声明此初始化程序,required以便所有子类都必须实现它。或者您可以声明Thing为,final以便它不能被子类化。
| 归档时间: |
|
| 查看次数: |
1097 次 |
| 最近记录: |