我目前正在构建一个应用程序,并试图理解 CoreData 的概念。我根据此链接的建议为应用程序创建了一个数据模型...
Apple "Define Your Data Model" Link
目前,我只是在本地使用一些测试数据用于开发目的。这是我创建的示例对象类...
import UIKit
func ==(lhs: Recipe, rhs: Recipe) -> Bool {
return lhs.hashValue == rhs.hashValue
}
class Recipe: Hashable {
dynamic var ID : Int = 0
dynamic var recipeName: String = ""
dynamic var recipeDescription:String = ""
dynamic var servings: Int = 0
dynamic var cookTime: Double = 0.0
dynamic var image: String? = ""
var hashValue : Int {
get {
return "\(self.ID)".hashValue
}
}
init?(id: Int, name: String, description: String, servings: Int, cooktime: Double, image: String) {
self.ID = id
self.recipeName = name
self.recipeDescription = description
self.servings = servings
self.cookTime = cooktime
self.image = image
if id < 0 || name.isEmpty || description.isEmpty || cookTime < 0 || servings < 0 {
return nil
}
}
}
然后,我在本地初始化了其中一些对象,以便在开发期间使用,并且它们工作正常。
我的问题是...
当需要使用像 CoreData 或 RealmSwift 这样的存储时,这种类型的数据模型会变得无关紧要吗?我会创建一个全新的数据模型(例如在 Realm 中)吗?或者这种类型的数据模型能否与其中一种数据库模型很好地配合?
最重要的是,现在像这样构建我的数据模型并在之后合并 CoreData 或 RealmSwift 会导致大量代码重构吗?如果是这种情况,那么是否建议放弃前端开发并在继续之前构建整个数据模型?
最佳答案
Core Data 和 Realm 采用两种截然不同的方法来定义架构。
对于 Core Data,您需要在 Xcode 的数据模型编辑器中设计模型,该编辑器会为每个版本创建一组 xcdatamodel
文件。
然后,您可以使用 Xcode 内置功能或某些第三方工具,如 mogenerator生成您的 NSManagedObject
实体类。 Core Data 可以使用 lightweight migrations 自动推断不同版本架构之间的映射。 ,但这仅在某些限制下有效。如果您的迁移案例应该更复杂,您可以定义自定义映射模型。
使用一般的 Realm 和具体的 RealmSwift,您可以完全在代码中定义您的架构(和迁移)。您的类必须继承自 Object
并且您必须定义您的属性 conforming to some rules ,以便正确识别并自动持久化。
但是,选择一种持久性框架而不是另一种持久性框架的决定将会对应用程序范围产生影响。例如,Core Data 和 Realm 对于多线程有不同的要求。虽然理论上可以避免这种情况,如果您完全封装持久层并仅与前端共享代理对象,您将同时失去组件支持的优势(NSFetchedResultsController
/RBQFetchedResultsController
)并且持久性框架可以提供更多便利。 (例如更改通知、自动更新……)
关于ios - 了解 iOS Swift 中的 CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36107840/