在Swift中使用自定义模型将CoreData模型添加到现有项目的最佳方法

时间:2018-09-11 18:34:34

标签: ios swift core-data swift4

我有一个具有现有自定义模型的项目,该项目从REST API(或nsurlcache)以JSON格式获取数据,但是现在我需要添加CoreData模型。关于如何最好地将我的模型“合并”到新的CoreData NSManagedObject模型中,我得到了相互矛盾的信息。

最合理,最干净的方法是什么?

我遇到的一些问题是,我的自定义模型一开始是(是)一个结构,而不是类,但这并不是一个大问题。

接下来的事实是,我在这里有很多“存储的属性”,而在CoreData模型的扩展中创建这些属性时遇到了问题。我需要它们(或替代物),因为有很多自定义格式的数据可能会多余地添加到CoreData模型中,但作为当前属性以非常清晰的方式存在。我试图将其添加到主类文件中,但是,我在很多地方都读到,最好的方法是创建自己的自定义扩展类(甚至不更改自动生成的存根扩展名)。我确实收到一个错误,无法将存储的属性添加到扩展中。我是否应该仅将所有这些功能更改为?好像很脏。

最后,总的来说,从现在开始,我应该如何组织我的模型?我所有的自定义功能都应该保留在我自己的(不是自动生成的)扩展文件中吗?扩展文件通常是针对每个模型或一个群集创建的(如果它们是短模型和相关模型)?是否应该手动将任何内容添加到+ CoreDataClass或+ CoreDataProperties?

1 个答案:

答案 0 :(得分:1)

您的冲突信息是什么?

您将需要考虑存储属性的用例。

CoreData对象支持2种不同的类型:临时属性(不会存储在持久性存储中)和非临时属性,它们将存储在持久性存储中。这样,您就可以开始设置模型设计了。两者都需要在模型中。

对不影响应用性能的事物使用更多的计算属性。那些您可以放入扩展名的文件。其他的则需要在模型中,从您的源中导入时要计算一次。

根据您的情况计算出的属性如下所示((考虑到您有一个NSManaged var eventDate

var formattedEventDate: String? {
    let dateFormatter = DateFormatter()
    //... set desired format/locale
    return dateFormatter.string(from: eventDate)
}