美文网首页
在Swift中使用GYDataCenter

在Swift中使用GYDataCenter

作者: 范范饭特稀 | 来源:发表于2018-04-04 14:29 被阅读73次

前言

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

    前言 GYDataCenter 是一个 SQLite 数据库框架,提供了一套简单易用的面向对象的数据操作接口,同时...

  • SEL in Swift

    在我们使用Objective-c 时经常使用SEL来执行某些操作。那么在Swift中如何使用呢?在Swift中是用...

  • Swift 4.2 Release Notes for Xcod

    概览 在Xcode 10中编辑Swift时使用Swift 4.2 Swift Complier 新功能 Swift...

  • GYDataCenter

    这是FMDB数据库的封装版本,具备内存缓存,自动创建及更新数据库表,线程安全,自动批量写入等特征,微信读书团队作品...

  • oc与swift混编中可能用到的宏

    一、NS_SWIFT_UNAVAILABLE 在swift中不可见,不能使用。 二、NS_SWIFT_NAME 在...

  • 优雅的使用UITableView(Swift 中)

    优雅的使用UITableView(Swift 中) 优雅的使用UITableView(Swift 中)

  • Swift中@objc的使用

    Swift中@objc的使用 在Swift代码中,使用@objc修饰后的类型,可以直接供Objective-C调用...

  • iOS:OC与Swift互调

    OC中如何访问Swift的类 在需要使用Swift的地方,导入工程名-Swift.h,就可以愉快的使用Swift了...

  • Swfit语法tips

    关于函数和闭包的介绍 在Swift中定义的Enum,OC中使用 Swift中定义如下,注意@objc 在OC中使用...

  • Swift - 反射Mirror

    在Swift中并不提倡使用Runtime,而是像其他语言一样使用反射(Reflect)。当然,目前Swift中的反...

网友评论

      本文标题:在Swift中使用GYDataCenter

      本文链接:https://www.haomeiwen.com/subject/srvkhftx.html