SQLiteValueExtension 0.0.7

SQLiteValueExtension 0.0.7

pujiaxin 维护。



  • pujiaxin33

SQLiteValueExtension

基于 SQLite.swift 库,易于存储 ArrayDictionary 或自定义数据类型。

原理:将 ArrayDictionary 或自定义类型转换为 String 类型,然后存储。查询时,将字符串转换为 ArrayDictionary 或自定义数据类型。

使用

符合 SQLiteValueStringExpressible 协议的数据类型,可以通过 SQLite.swift 存储到数据库中。

原生基本类型

以下基本类型符合 SQLiteValueStringExpressible 协议:-Int、-Int64、-Bool、-Double、-Float、-String、-Blob、-Data、-Date

数组,字典

Array.ElementDictionary.KeyDictionary.Value 类型符合 SQLiteValueStringExpressible 协议,可以通过 SQLite.swift 存储到数据库中。

//Expression definition
static let intArray = Expression<[Int]?>("int_array")
static let intStringDict = Expression<[Int:String]?>("int_string_dict")
//Insert
let insert = config.insert(normalInt <- basic.normalInt, intStringDict <- basic.intStringDict)
try connection.run(insert)
//Query
let rows = try connection.prepare(config)
var result = [BasicDataModel]()
for data in rows {
    let basic = BasicDataModel(JSON: [String: Any]())!
    basic.normalInt = data[normalInt]
    basic.intStringDict = data[intStringDict]
    result.append(basic)
}

自定义类型

遵循 SQLiteValueStorable 协议并实现相关方法。

SQLiteValueStorable 继承了 SQLiteValueStringExpressible 协议,并在扩展中指定 datatypeValueString,以便更容易使用。

extension BasicInfoModel: SQLiteValueStorable {
    public static func fromStringValue(_ stringValue: String) -> BasicInfoModel {
        return BasicInfoModel(JSONString: stringValue) ?? BasicInfoModel(JSON: [String: Any]())!
    }
    public var stringValue: String {
        return toJSONString() ?? ""
    }
}

存储包含自定义数据类型的数组或字典的示例

//Expression definition
static let modelArray = Expression<[BasicInfoModel]?>("model_array")
static let stringModelDict = Expression<[String:BasicInfoModel]?>("string_model_dict")
//Insert
let insert = config.insert(modelArray <- basic.modelArray, stringModelDict <- basic.stringModelDict)
try connection.run(insert)
//Query
let rows = try connection.prepare(config)
var result = [BasicDataModel]()
for data in rows {
    let basic = BasicDataModel(JSON: [String: Any]())!
    basic.modelArray = data[modelArray]
    basic.intStringDict = data[intStringDict]
    result.append(basic)
}

支持基本类型

例如,Float 数据类型

extension Float: SQLiteValueStringExpressible {
    public static var declaredDatatype: String {Double.declaredDatatype}
    public static func fromDatatypeValue(_ datatypeValue: Double) -> Float {
        return Float(datatypeValue)
    }
    public var datatypeValue: Double {
        return Double(self)
    }
    public static func fromStringValue(_ stringValue: String) -> Float {
        return Float(stringValue) ?? 0
    }
    public var stringValue: String {
        return String(self)
    }
}

如果您需要支持其他基本数据类型,请提交 Issue 或 Pull Request。

安装

Cocoapods

pod'SQLiteValueExtension'

SPM

从版本 0.0.6 开始支持。

有关 Xcode11 的安装教程,请参阅文章:[在 Xcode 中使用 Swift Package](https://xiaozhuanlan.com/topic/9635421780)。

推荐

-ModelAdaptor:基于 SQLite.swift 的轻量级 ORM 库。-SQLite.swift 自定义类型