SundeedQLite
SundeedQLite 是使用 Swift 语言构建的最简单的离线数据库集成
需求
-
iOS 12.0+
-
XCode 10.3+
-
Swift 5+
安装
通过 CocoaPods 安装
SuddeedQLite 可通过 CocoaPods 获取。CocoaPods 是一个依赖于管理器,可以自动化并简化在项目中使用类似 MarkdownKit 的第三方库的过程。您可以使用以下命令安装 CocoaPods
gem install cocoapods
要使用 CocoaPods 将 SundeedQLite 集成到您的 Xcode 项目中,只需将以下行添加到您的 Podfile
pod "SundeedQLite"
之后,运行以下命令
pod install
符号
- +:用于在数据库中标记主键。
- <<:用于标记 ASCENDING 排序方法
- >>:用于标记 DESCENDING 排序方法
- <~>:用于将数据库返回的对象映射到特定属性
- <*>:用于声明如果此属性从数据库返回 nil,则整个父对象将丢弃。
- <**>:用于声明如果此数组为空,或其中一个元素是必需的(<*>),则整个父对象将删除
注意
- 主键应该是字符串。
- 要创建嵌套对象(例如:Employee),Employer 和 Employee 都应该有主键。
支持的类型
- SundeedQLite 对象
- 字符串
- 整数
- 双精度浮点数
- 浮点数
- 布尔值
- 日期
- UIImage
- 数组
- 枚举/结构体(请参阅以下文档)
备注
- 嵌套对象将被正常保存
- 上述类型的可选和非可选值也将被保存
- 对象数组和原始数据类型的数组将被保存
- 在检索时,不得将数据库返回的nil值添加到数组中
监听器
要监听事件,您可以添加任何带有要执行代码块的监听器,当事件发生时执行。
支持的事件
- 保存
- 更新
- 检索
- 删除
- 所有事件
注意:请始终记得保存此监听器的实例,以便在不再需要时可以停止它。
文档
import SundeedQLite
class Employer: SundeedQLiter {
var id: String!
var fullName: String?
var employees: [Employee]?
required init() {}
func sundeedQLiterMapping(map: SundeedQLiteMap) {
id <~> map["id"]+
fullName <~> map["fullName"]<<
employees <~> map["employees"]
}
}
class Employee: SundeedQLiter {
var id: String!
var firstName: String?
required init() {}
func sundeedQLiterMapping(map: SundeedQLiteMap) {
id <~> map["id"]
firstName <~> map["firstName"]
}
}
import UIKit
class ViewController: UIViewController {
var employerSaveListener: Listener?
override func viewDidLoad() {
super.viewDidLoad()
let employee = Employee()
employee.firstName = "Nour"
let employer = Employer()
employer.id = "ABCD-1234-EFGH-5678"
employer.fullName = "Nour Sandid"
employer.employees = [employee]
employerSaveListener = employer.onSaveEvents({ (object) in
print(object.id)
})
employer.save()
}
deinit {
employerSaveListener.stop()
}
}
自定义类型
要保存自定义类型(如枚举或结构体)的变量,您可以使用SundeedQLiteConverter。
class TypeConverter: SundeedQLiteConverter {
func fromString(value: String) -> Any? {
return Type(rawValue: value)
}
func toString(value: Any?) -> String? {
return (value as? Type)?.rawValue
}
}
enum Type: String {
case manager
case ceo
}
class Employer: SundeedQLiter {
var type: Type?
func sundeedQLiterMapping(map: SundeedQLiteMap) {
type <~> (map["type"], TypeConverter())
}
}
速查表
保存
employer.save()
检索
Employer.retrieve { (employers) in
for employer in employers {
print(employer.fullName)
}
}
Employer.retrieve(withFilter: SundeedColumn("fullName") == "Nour Sandid",
orderBy: SundeedColumn("fullName"),
ascending: true) { (employers) in
for employer in employers {
print(employer.fullName)
}
}
数据库重置
SundeedQLite.deleteDatabase()
由
SQLite3
许可
MIT