SwiftyDB 1.1.3

SwiftyDB 1.1.3

测试已测试
语言支持的语言 SwiftSwift
许可证 MIT
发布最后发布2016年5月
SPM支持 Swift Package Manager (SPM)

Øyvind Grimnes 维护。



SwiftyDB 1.1.3

alt text

市面上有很多库旨在帮助开发者轻松创建和使用 SQLite 数据库。不幸的是,开发者仍然不得不在诸如编写表定义和 SQL 查询等简单任务中纠缠不清。SwiftyDB 自动处理所有你不希望花费时间做的事情。

您可以在此处找到文档

内容
特性
用法
访问数据库
   同步访问
   异步访问
结果格式
过滤结果
定义您的类
   主键
   忽略属性
如何检索对象
安装
许可证

特性

  • [x] 自动创建和更新数据库、表和记录
  • [x] 支持可选类型
  • [x] 简单的基于平等性的过滤
  • [x] 线程安全的数据库操作
  • [x] 支持异步数据库访问
  • [x] 100% 文档化
  • [x] 复杂的过滤
  • [x] 存储集合
  • [ ] 存储嵌套对象
  • [ ] 自动迁移
  • [ ] 自定义索引

用法

几乎即插即用。您只需创建一个 SwiftyDB 实例,所有操作将会在幕后自动处理🎩

访问数据库

告诉 SwiftyDB 您想命名的数据库名称,然后就可以开始了。如果未找到具有提供名称的数据库,则会创建它。

let database = SwiftyDB(databaseName: "dogtopia")

同步访问

添加或更新记录
database.addObject(dog, update: true)
database.addObjects(dogs, update: true)
检索数据

使用与类型属性匹配的数据类型检索数据

/* Array of dictionaries representing `Dog` objects from the database */
database.dataForType(Dog.self)
database.dataForType(Dog.self, matchingFilters: ["id": 1])

狗数据示例

[
    "id": 1,                // As an Int
    "name": "Ghost",        // As a String
    "owner": "John Snow",   // As a String
    "birth": August 6, 1996 // As an NSDate
]
检索对象

使用数据库中的数据检索对象

database.objectsForType(Dog.self)
database.objectsForType(Dog.self, matchingFilters: ["id": 1])

为了检索对象,Swift 目前对你的类施加了一些限制

删除记录
database.deleteObjectsForType(Dog.self)
database.deleteObjectsForType(Dog.self, matchingFilters: ["name": "Max"])

异步访问

添加或更新记录
database.asyncAddObject(dog) { (result) -> Void in
    if let error = result.error {
        // Handle error
    }
}
检索数据

使用与类型属性匹配的数据类型检索数据

database.asyncDataForType(Dog.self) { (result) -> Void in
    if let data = result.value {
        // Process data
    }
}
检索对象

使用与类型属性匹配的数据类型检索数据

database.asyncObjectsForType(Dog.self) { (result) -> Void in
    if let objects = result.value {
        // Handle objects
    }
}

为了检索对象,Swift 目前对你的类施加了一些限制

删除记录
database.asyncDeleteObjectsForType(Dog.self) { (result) -> Void in
    if let error = result.error {
        // Handle error
    }
}

过滤结果

Filter对象用于过滤查询。所有过滤器在查询数据库之前都将转换为SQLite格式。

简单过滤器

定义过滤器最简单的方式是使用一个字典

database.objectsForType(Dog.self, matchingFilters: ["name": "Ghost"])

将检索所有名称为‘Ghost’的对象

复杂过滤器

对于更复杂的过滤器,你可以实例化一个新的Filter对象,并定义你的过滤器

let filter = Filter.equal("name", value: "Ghost")
                   .like("owner", pattern: "J_h%")
                   .greaterThan("id", value: 3)

database.objectsForType(Dog.self, matchingFilters: filter)

文档中查看所有可用的过滤器。

由于这些内容作为 blob 存储在数据库中,因此无法使用存储集合的内容来过滤结果

结果格式

所有查询都返回一个Result。它将是一个包含查询数据的.Success包装,或是一个包含抛出错误的.Error封装。

enum Result<A: Any>: BooleanType {
    case Success(A)
    case Error(ErrorType)

    var data: A?
    var error: ErrorType?
    var isSuccess: Bool
    var boolValue: Bool {return isSuccess}
}

处理结果

Result的实现使其成为一款通用工具,可以(希望如此)适配你的编程风格😬

处理值

你可以通过value属性捕获查询的数据。如果抛出了错误,这个属性将为nil

if let object = result.value {
    // Process objects
}
处理错误

你可以这样检测错误

if !database.addObject(dog) {
    // An error occured
}

或者这样通过error属性捕获它

if let error = result.error {
    // Process objects
}

如果你想,你可以甚至搬出你的铁锤开始敲坚果

switch result {
    case .Success(let value):
        // Process value
    case .Error(let error):
        // Handle error
}

定义你的类

让我们用一个简单的Dog类作为示例

class Dog {
    var id: Int?
    var name: String?
    var owner: String?
    var birth: NSDate?
}

所有对象都必须遵守Storable协议。

public protocol Storable {
    init()
}

通过添加Storable协议并实现init(),你已经准备好了。

class Dog: Storable {
    var id: Int?
    var name: String?
    var owner: String?
    var birth: NSDate?

    required init() {}
}

SwiftyDB支持继承。类和超类中的有效属性将被自动存储。

主键

建议实现PrimaryKeys协议。 primaryKeys()方法应返回一个唯一标识对象的属性名集合。

extension Dog: PrimaryKeys {
    class func primaryKeys() -> Set<String> {
        return ["id"]
    }
}
忽略属性

如果你的类中包含你不想在数据库中出现属性,可以实施IgnoredProperties协议。

extension Dog: IgnoredProperties {
    class func ignoredProperties() -> Set<String> {
        return ["name"]
    }
}

不属于Value协议的数据类型的属性将被SwiftyDB自动忽略

如何检索对象

SwiftyDB也可以从数据库中检索具有所有属性分配数据的完整对象。为了实现这一点,类型必须是NSObject的子类,所有属性类型都必须可以在Objective-C中表示。这是因为Swift目前不支持属性的动态分配。

动态属性类型

  • [x] Int
  • [x] UInt
  • [x] Float
  • [x] Double
  • [x] Bool
  • [x] String / String?
  • [x] NSNumber / NSNumber?
  • [x] NSString / NSString?
  • [x] NSDate / NSDate?
  • [x] NSData / NSData?

一个更新后的Dog类,可用于从数据库中检索完整对象

class Dog: NSObject, Storable {
    var id: NSNumber? // Notice that 'Int?' is not supported. Use NSNumber? instead
    var name: String?
    var owner: String?
    var birth: NSDate?

    override required init() {
        super.init()
    }
}

安装

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

pod "SwiftyDB"

作者

Øyvind Grimnes, [email protected]

许可

SwiftyDB在MIT许可下可用。有关更多信息,请参阅LICENSE文件。