Stack 2.0.0

Stack 2.0.0

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

Maintained by Shaps.



Stack 2.0.0

Stack

是否希望有一个类型安全的 CoreData Stack?

读取

let stack = Stack.defaultStack()
let query = Query<Person>().sort(byKey: "name", direction: .Ascending).filter("name == %@", name)
let results = try! stack.fetch(query)
print(results.first?.name)

写入

let stack = Stack.defaultStack()
stack.write({ (transaction) -> Void in
  let person = try transaction.fetchOrInsert("name", identifier: name) as Person
  person.age = 35
}, completion: nil)

介绍 Stack

CoreData 是一个强大的 API,但很容易被误用和误解。Stack 试图消除与在您应用程序中使用 CoreData 相关的许多问题。

具体来说,Stack 添加了用于处理查询和更新的类型安全和线程安全(ish)的方法。

此外,Stack 通过以下功能等提供了更加丰富的 API:

  • 类型安全的插入、更新和删除
  • 查询链式调用
  • 自定义查询类,用于设置排序、过滤等(更多信息请见文档)
  • 基于事务的 API - 无对上下文的访问!
  • 异步的
  • 轻量级 - Swift 函数重载使 API 保持简洁
  • 支持 NSFetchedResultsController - 便利的 init()

目标

Stack 的目标是提供从 CoreData 到干净的、丰富的抽象。在保留上下文和线程管理等问题的同时,提供 CoreData 的灵活性和强大功能。

Swift 使得 Stack 现在支持类型安全的查询,在您应用程序中实现 CoreData 时,您将更有信心。

Stack 2.0 通过 Stack 本身提供只读访问,将所有写入方法移至事务中。这样可以防止您在事务之外尝试更新对象,从而避免许多常见错误。

Stack 被用于各种生产应用程序中,但我仍认为它是一个不断变化的概念,所以输入欢迎 :)

需要知道

读取

一旦您有了 Stack,阅读就很容易。您只需要构造一个查询,然后在对您的 Stack 调用其中一个 fetch 方法。注意:由于查询可能会返回 nil,所以必需是可选的。

let person = try! stack.fetch("name", identifier: "123") as? Person
print(person?.name)

现在我们可以更新相同的对象。注意:感谢 Swift 闭包,我们可以安全地用相同的名称重新定义变量。

let stack = Stack.defaultStack()
stack.write({ (transaction) -> Void in
  let person = transaction.copy(person)
  person.age = 35
}, completion: nil)

如您所见,所有写入操作仅发生在交易内,这样可以防止实施 CoreData 时出现的许多常见错误。

你可能注意到了copy()函数?这是Stack提供的另一个优秀特性。基本上,它将对象复制到当前事务/上下文中,这样你就不需要在错误的线程上尝试修改对象。而且不用担心,所有更改会自动传播到其他线程,😉

用法

要运行示例项目,首先从Examples目录克隆仓库,然后运行pod install

安装

Stack可通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中

pod “Stack”

作者

Shaps, [email protected]

许可

Stack可在MIT许可下使用。信息请参阅LICENSE文件。

署名

  • 所有代码都是我所写,本项目中不使用任何第三方代码。