SwiftyIO 1.3.0

SwiftyIO 1.3.0

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

Rafael Veronezi 维护。



SwiftyIO 1.3.0

  • Rafael Veronezi

SwiftyIO

SwiftyIO 是一个用 Swift 编写的 Cocoa Touch 框架,可以快速将 Core Data 集成到您的 iOS 和 OS X 项目中,并提供建立实体对象的多个类。

这个库非常适合中小型复杂度项目,因为它允许您快速设置 Model 和持久化,同时抽象出使用 NSManagedObjectContext 和 NSManagedObjects 的复杂性。它还提供了有用的辅助工具,如 CoreDataTableViewController,使 iOS 表视图的设置更加容易。

试试吧,并为使它变得更好提供您的反馈!

安装

SwiftyIO 是完全用 Swift 实现的,并以 Cocoa Touch 框架库项目的形式分发。您可以通过 Cocoapods 安装。

platform :ios, '8.0'
use_frameworks!

pod 'SwiftyIO', '~> 1.2'

Cocoa Touch 框架需要最低部署目标为 iOS 8。要在需要支持 iOS 7 的项目中使用 SwiftyIO,您需要将源代码直接包含到您的项目中。

手动安装

SwiftyIO 作为 Xcode 项目分装,包含两个目标:

  1. SwiftyIO_iOS:一个 Cocoa Touch 框架,用于链接 iOS 项目。
  2. SwiftyIO_OSX:一个 Cocoa 框架,用于链接 OS X 项目。

您可以将代码下载或克隆到您的项目中,或者将其作为子模块克隆,然后根据所需平台将 Framework 添加为 App 的目标中的链接二进制。

如果您正在使用 iOS 7 的部署目标

请将以下文件添加到您的源中:

  • BaseDataContext.swift - 基础数据上下文类。
  • EntityDataSource.swift - 基础实体数据源类,提供了 SwiftyIO 的所有 CRUD 功能。
  • Extensions/NSManagedObjectContext+Helpers.swift - 为基础类提供的 NSManagedObjectContext 类扩展。
  • Extensions/EntityDataSource+iOS.swift - 为 iOS 特定的数据源基类提供的扩展。 不应包含在 OS X 目标中
  • Helpers/CoreDataTableViewController.swift - 一个辅助基类,可以轻松使用 SwiftyIO 获取的数据加载数据表的视图控制器。 它是 iOS 特定的,不应包含在 OS X 目标中。

使用

SwiftyIO提供了用于与Core Data模型实体交互的非常简单的API。首先,您需要从BaseDataContext中派生,该类设置了您的Core Data堆栈并提供NSManagedObjectContext。使用它的高级初始化器设置模型名称。使用通用类EntityDataSource声明用于访问实体的属性,并用实体和键字段名称初始化它们,如下面的示例项目模板所示

class NotesContext: BaseDataContext {

    //
    // MARK: - Entity Data Source Properties

    var categories: EntityDataSource<Category, NSNumber>!
    var notes: EntityDataSource<Note, NSString>!

    //
    // MARK: - Initializers

    init() {
        super.init(resourceName: "Notes")

        if let moc = self.managedObjectContext {
            self.categories = EntityDataSource(managedObjectContext: moc,
                entityName: "Category",
                entityKeyName: "categoryId",
                entityKeyGeneration: PrimaryKeyGeneration.AutoNumber)

            self.notes = EntityDataSource(managedObjectContext: moc,
                entityName: "Note",
                entityKeyName: "noteId",
                entityKeyGeneration: PrimaryKeyGeneration.UUID)
        }
    }

}

可选地,您可以将其数据上下文设置为单例,添加属性

//
// MARK: - Singleton

class var sharedInstance: NotesContext {
    struct Singleton {
        static var instance: NotesContext?
        static var token: dispatch_once_t = 0
    }

    dispatch_once(&Singleton.token) {
        Singleton.instance = NotesContext()
    }

    return Singleton.instance!
}

务必正确地替换类型。以下几点需要注意

  • EntityDataSource期望定义两种类型,第一个是您的实体类,必须从NSManagedObject派生;第二个是主键字段类型。它必须是Core Data支持的类型。另外,您必须使用Foundation类,例如使用NSNumber来表示整数,使用NSString来表示字符串。
  • 主键可以使用序列号、ID或您提供的自定义闭包自动生成。

这个模板Xcode代码片段可在此Gist中找到。

数据操作

数据操作由EntityDataSource类提供。它是一个句子包装器,围绕实体,允许您轻松创建、查询、编辑和删除对象。

创建对象

使用SwiftyIO创建和配置对象非常简单,假设您想添加一个笔记类别

let newCategory = NotesContext.categories.add {
  $0.name = "Recipes"
}

添加方法接收一个闭包参数,该参数传递创建的对象,允许您在一遍中进行设置。对象返回给调用者,并自动持久化。

这是一个使用SwiftyIO提高生产效率的示例。查看EntityDataSource.swift的源代码,以查看所有可用方法。以下是简要列表

  • add:添加一个新实体记录。
  • create:添加一个空记录。
  • clear:从实体中删除所有记录。
  • count:在实体上计算记录数,可选提供谓词以进行过滤。
  • delete:从实体中删除记录。
  • getAll:获取此实体中的所有记录,可选提供排序描述符。
  • find:根据ID获取记录或如果不存在则返回nil。
  • first:根据谓词获取第一条记录。
  • filter:获取根据谓词过滤的记录列表,可选提供排序描述符。
  • update:更新记录数据。

示例项目

NotesApp项目是一个非常简单的iOS笔记应用,它使用SwiftyIO提供简单的模型管理。您可以从其GitHub存储库中查看和下载示例项目代码。

注意

此库不是线程安全的。它最适合作为单例运行。它的主要目标是小型和简单的项目,不使用复杂的Core Data模型。

感谢使用SwiftyIO。如果您喜欢此API,请贡献并帮助我们利用Swift的力量制作一个更大更完整的Core Data API!!您可以分支此存储库并提交拉取请求。

版本历史

当前可用的版本是1.2。查看完整变更日志