在Swift中使用GYDataCenter

前言

GYDataCenter 是一个 SQLite 数据库框架,提供了一套简单易用的面向对象的数据操作接口,同时保留了 SQL 查询的灵活性。GYDataCenter 简单易上手,相对于 CoreData,GYDataCenter 的学习成本更低。同时,根据自己的需求,开发者可以更方便地划分数据库,设计数据库表,数据库索引等。

OC使用说明请参考官方文档,在这里我们只讨论Swift下使用GYDataCenter。

pod版本

为了兼容FMDB,应把FMDB版本置为2.6.2,最新的2.7.2会变异报错。

  • pod 'GYDataCenter'
  • pod 'FMDB', '~> 2.6.2' # 为了兼容GYDataCenter

快速上手

创建模型类继承于GYModelObject,然后实现GYModelObjectProtocol的代理方法即可。由于在Swift项目中写相关代码时不会很友好的出现提示,所以这里必须手写代码。

// 示例代码
class ExampleModel: GYModelObject {


    // MARK: - GYModelObjectProtocol
    // 返回数据库的名字
    override class func dbName() -> String {
        return "数据库名"
    }
  
    // 返回表的名字  
    override class func tableName() -> String {
        return "表名"
    }
   
    // 返回主键的属性名
    override class func primaryKey() -> String {
        return "主键"
    }
    
    // 返回需要持久化的属性名
    override class func persistentProperties() -> [Any] {
            return [属性数组]
    }

}


然后我们在定义模型属性的时候需要加上@objc dynamic关键字,因为在GYDataCenter中使用到了KVO,属性会动态派发,然而我们知道Swift是静态语言,如果要像Objective-C使用运行时特性或者动态替换方法、属性的话,需要加上dynamic关键字,因为'dynamic' must also be '@objc',所以dynamic前面需要再加上@objc关键字。

class ExampleModel: GYModelObject {

    @objc dynamic var uid: Int?
    @objc dynamic var name: String?
    @objc dynamic var age: Int?
    @objc dynamic var gender: String?
    @objc dynamic var subModels: [ExampleSubModel]?


    // MARK: - GYModelObjectProtocol
    // 返回数据库的名字
    override class func dbName() -> String {
        return "EXAMPLE_DATABASE"
    }
  
    // 返回表的名字  
    override class func tableName() -> String {
        return "EXAMPLE_TABLE_NAME"
    }
   
    // 返回主键的属性名
    override class func primaryKey() -> String {
        return "uid"
    }
    
    // 返回需要持久化的属性名
    override class func persistentProperties() -> [Any] {
            return ["uid","name","age","gender","subModels"]
    }

}

class ExampleSubModel: GYModelObject {
    @objc dynamic name: String?
}

增删改查

使用sql语句进行增删改查,方法同OC,参考官方文档

realm & WCDB

使用realm时,继承realm的模型基类Object,其属性也要添加@objc dynamic关键字。

class Person: Object {
    @objc dynamic var name = ""
    @objc dynamic var age = 0
}

使用微信的数据库WCDB时,由于目前最新版Xcode9.3和Swift4.1的改动,WCDB在Xcode9.3中编译报错,这里不做相关讨论。等苹果大大把这个问题修复后,再尝试WCDB。

It's said that Swift 4.1 is source compatible to 4.0, which means that developers can recompile the code without any changes.
However, not.


相关参考:

@OBJC 和 DYNAMIC
GYDataCenter:高性能数据库框架

你可能感兴趣的:(在Swift中使用GYDataCenter)