前言
GYDataCenter 是一個 SQLite 數(shù)據(jù)庫框架错妖,提供了一套簡單易用的面向?qū)ο蟮臄?shù)據(jù)操作接口混槐,同時保留了 SQL 查詢的靈活性。GYDataCenter 簡單易上手挠他,相對于 CoreData敢茁,GYDataCenter 的學(xué)習(xí)成本更低。同時耗拓,根據(jù)自己的需求拇颅,開發(fā)者可以更方便地劃分?jǐn)?shù)據(jù)庫,設(shè)計數(shù)據(jù)庫表乔询,數(shù)據(jù)庫索引等樟插。
OC使用說明請參考官方文檔,在這里我們只討論Swift下使用GYDataCenter竿刁。
pod版本
為了兼容FMDB,應(yīng)把FMDB版本置為2.6.2黄锤,最新的2.7.2會變異報錯。
- pod 'GYDataCenter'
- pod 'FMDB', '~> 2.6.2' # 為了兼容GYDataCenter
快速上手
創(chuàng)建模型類繼承于GYModelObject食拜,然后實現(xiàn)GYModelObjectProtocol的代理方法即可鸵熟。由于在Swift項目中寫相關(guān)代碼時不會很友好的出現(xiàn)提示,所以這里必須手寫代碼负甸。
// 示例代碼
class ExampleModel: GYModelObject {
// MARK: - GYModelObjectProtocol
// 返回數(shù)據(jù)庫的名字
override class func dbName() -> String {
return "數(shù)據(jù)庫名"
}
// 返回表的名字
override class func tableName() -> String {
return "表名"
}
// 返回主鍵的屬性名
override class func primaryKey() -> String {
return "主鍵"
}
// 返回需要持久化的屬性名
override class func persistentProperties() -> [Any] {
return [屬性數(shù)組]
}
}
然后我們在定義模型屬性的時候需要加上@objc dynamic關(guān)鍵字流强,因為在GYDataCenter中使用到了KVO,屬性會動態(tài)派發(fā)呻待,然而我們知道Swift是靜態(tài)語言打月,如果要像Objective-C使用運(yùn)行時特性或者動態(tài)替換方法、屬性的話蚕捉,需要加上dynamic關(guān)鍵字奏篙,因為'dynamic' must also be '@objc',所以dynamic前面需要再加上@objc關(guān)鍵字迫淹。
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
// 返回數(shù)據(jù)庫的名字
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語句進(jìn)行增刪改查秘通,方法同OC为严,參考官方文檔
realm & WCDB
使用realm時,繼承realm的模型基類Object充易,其屬性也要添加@objc dynamic關(guān)鍵字梗脾。
class Person: Object {
@objc dynamic var name = ""
@objc dynamic var age = 0
}
使用微信的數(shù)據(jù)庫WCDB時,由于目前最新版Xcode9.3和Swift4.1的改動盹靴,WCDB在Xcode9.3中編譯報錯,這里不做相關(guān)討論瑞妇。等蘋果大大把這個問題修復(fù)后稿静,再嘗試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.