Duvel 1.0.0

Duvel 1.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布日期最后发布2016年10月
SPM支持 SPM

Leroy JenkinsJelle Vandebeeck 维护。



Duvel 1.0.0

  • 作者:
  • Jelle Vandebeeck

Duvel 使 Swift 使用 Core Data 友好到前所未有的程度。

目录

安装

Duvel 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod 'Duvel', '~> 1.0'

功能

初始化

使用 Duvel 实例初始化 Duvel 的使用。初始化实例时将创建持久存储。

// Create the default store.
let duvel = try! Duvel()

// Create an in memory store.
let duvel = try! Duvel(storeType: NSInMemoryStoreType)

// Create a store with a custom managed object model.
let managedObjectModel = NSManagedObjectModel.mergedModelFromBundles(nil)
let duvel = try! Duvel(managedObjectModel: managedObjectModel)

如果您想将 Duvel 实例化为 sharedInstance,以便在整个应用程序中使用,而无需在不同类之间传递实例,则可以像这样扩展 Duvel

extension Duvel {
    static var sharedInstance: Duvel? = {
        // Add more configuration to the instance as shown in the above code.
        return try? Duvel()
    }()
}

// This will encapsulate `Duvel` in an singleton instance.
Duvel.sharedInstance

上下文

有三种访问上下文的方式。

// Get the main `NSManagedObjectContext`.
Duvel.sharedInstance.mainContext

// Get the background `NSManagedObjectContext`.
Duvel.sharedInstance.backgroundContext

// Get the `NSManagedObjectContext` for the current thread.
Duvel.sharedInstance.currentContext

backgroundContext 的更改在成功后自动合并到 mainContext 中。

创建

您可以在上下文中创建一个 NSManagedObject。您想要创建的 NSManagedObject 必须遵守 ManagedObjectType 协议。在这种情况下,SomeManagedObject 遵守 ManagedObjectType

let context: NSManagedObjectContext = ...
let object = SomeManagedObject.create(in: context)

我们还可以在创建过程中立即设置属性。

let context: NSManagedObjectContext = ...
let object = SomeManagedObject.create(in: context) { innerObject in
  innerObject.name = "Leroy"
}

注意! 只有在保存之前,才会将任何内容持久化到存储中。

删除

有删除所有基于给定 NSPredicateNSManagedObject 的可能性。如果没有提供谓词,则删除给定类型的所有对象。

let context: NSManagedObjectContext = ...

// Delete all the objects.
SomeManagedObject.deleteAll(in: context)

// Delete the objects that match a predicate.
let predicate: NSPredicate = ...
SomeManagedObject.deleteAll(in: context, with: predicate)

// Delete one the object.
let object: SomeManagedObject = ...
object.delete(inContext: context)

如果您只想删除单个对象,则可以使用在 Core Data 中定义的。

let context: NSManagedObjectContext = ...
SomeManagedObject.deleteObject(in: context)

注意! 只有在保存之前,才会将任何内容持久化到存储中。

查询

根据属性值查询第一个 NSManagedObject

当没有找到与该值相对应的对象时,您可以创建一个新的对象,并将其属性设置为指定的值。当将 createIfNeeded 参数设置为 true 时,将执行此操作。

let context: NSManagedObjectContext = ...
let object = SomeManagedObject.first(in: context, with: "name", value: "Leroy")
let object = SomeManagedObject.first(in: context, with: "name", value: "Leroy", createIfNeeded: true)

您还可以根据给定的谓词搜索找到的第一个 NSManagedObject。您还可以指定检索结果排序顺序,以便最终获取最后一个对象。

let predicate: NSPredicate = ...
let descriptors: [NSSortDescriptor] = ...
let context: NSManagedObjectContext = ...
let object = SomeManagedObject.first(in: context, with: predicate, sort: descriptors)

获取某个特定类型的所有对象。您可以通过提供 NSPredicate 指定过滤器,并通过提供 NSSortDescriptor 列表来指定排序顺序。

let predicate: NSPredicate = ...
let descriptors: [NSSortDescriptor] = ...
let context: NSManagedObjectContext = ...
let objects = SomeManagedObject.all(in: context, with: predicate, sort: descriptors)

计算对象数量。您可以通过提供 NSPredicate 指定过滤器。

let predicate: NSPredicate = ...
let context: NSManagedObjectContext = ...
let count = SomeManagedObject.count(in: context, with: predicate)

保存

使用上下文中提供的 perform 函数将更改持久保存到存储中。

此函数将应用更改到从初始上下文创建的子上下文中。当这些更改成功应用时,它们将被合并到初始上下文中。

context.perform(changes: { localContext in
  // Modify objects inside this closure. At the end of the closure the changes will be
  // automatically persisted to the store.
  // Make sure you do the changes on the given `localContext`.
}, completion: {
  // This completion closure will be called when `Duvel` finished writing to the store.
})

有时您会想更新现有的一个 NSManagedObject。如果您想这么做并用 perform 函数,那么您可能需要将该对象转换为 localContext 中的一个对象。

let existingObject: SomeManagedObject = ...
context.perform(changes: { localContext in
  let localObject = existingObject.to(context: localContext)
  localObject.name = "Leroy"
}, completion: {
  ...
})

待办事项清单

以下是我们待办事项列表的概述。

  • [ ] 为属性创建提供类型安全。
  • [ ] 添加通知。

作者

Jelle Vandebeeck,[email protected]

许可协议

Duvel 在 MIT 许可协议下提供。有关更多信息,请参阅 LICENSE 文件。