今天給大家?guī)淼氖强胺Q是一個(gè)可以替代SQLite,Core Data 的以及ORMlibraries的輕量級數(shù)據(jù)庫---Realm移動(dòng)端數(shù)據(jù)庫。
相比SQLite,Realm更快并且具有很多現(xiàn)代數(shù)據(jù)庫的特性,比如支持JSON,流式api馏慨,數(shù)據(jù)變更通知,以及加密支持姑隅,這些都為IOS開發(fā)者帶來了方便写隶。
Ream提供了五種編程方式的實(shí)現(xiàn)。分別是Java讲仰,Objective C慕趴,Swift,React-Native鄙陡,tamarin冕房。在前面我著重介紹在Android中的使用。現(xiàn)在來介紹在Swift中得使用趁矾。
1 .關(guān)于Realm的幾個(gè)特點(diǎn):
(1)使用簡單耙册,大部分常用的功能(比如插入、查詢等)都可以用一行簡單的代碼輕松完成毫捣,學(xué)習(xí)成本低详拙。
(2)Realm不是基于Core Data,也不是基于SQLite封裝構(gòu)建的蔓同。它有自己的數(shù)據(jù)庫存儲(chǔ)引擎饶辙。
(3)Realm具有良好的跨平臺特性,可以在iOS和Android平臺上共同使用牌柄。代碼可以使用 Swift 畸悬、 Objective-C 以及 Java 語言來編寫侧甫。
(4)Realm 還提供了一個(gè)輕量級的數(shù)據(jù)庫查看工具(Realm Browser)珊佣。你也可以用它進(jìn)行一些簡單的編輯操作(比如插入和刪除操作)
2.支持的類型
- Realm支持以下的屬性類型:Bool、Int8披粟、Int16咒锻、Int32、Int64守屉、Double惑艇、Float、String、NSDate(精度到秒)以及NSData.
- 也可以使用List<object> 和Object來建立諸如一對多滨巴、一對一之類的關(guān)系模型思灌,此外Object的子類也支持此功能。
3.Realm的安裝配置
- Realm的官網(wǎng)去下載最新框架:http://static.realm.io/downloads/swift/latest
-
拖拽RealmSwift.framework和Realm.framework文件到”Embedded Binaries”選項(xiàng)中恭取。選中Copy items if needed并點(diǎn)擊Finish
4.開始獲取Realm
//
// RealmUtil.swift
// HelloSwfit
//
// Created by lidong on 16/6/11.
// Copyright ? 2016年 lidong. All rights reserved.
//
import Foundation
import RealmSwift
/// RealmUtil工具類
class RealmUtil {
private static let instance = RealmUtil()
// 單例 全局的數(shù)據(jù)訪問接口
class var sharedInstance: RealmUtil
{
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : RealmUtil? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = RealmUtil()
}
return Static.instance!
}
/**
得到Realm
- returns: <#return value description#>
*/
func getRealm() -> Realm{
var config = Realm.Configuration()
// Use the default directory, but replace the filename with the username
config.fileURL = config.fileURL!.URLByDeletingLastPathComponent?
.URLByAppendingPathComponent("realm_demo.realm")
// 創(chuàng)建一個(gè)有配置的realm
let realm = try! Realm(configuration: config)
return realm
}
}
5.創(chuàng)建RealmSwift.Object
//
// Dog.swift
// HelloSwfit
//
// Created by lidong on 16/6/11.
// Copyright ? 2016年 lidong. All rights reserved.
//
import UIKit
import RealmSwift
class Dog: Object {
dynamic var name = ""
dynamic var age = 0
}
class Person: Object {
dynamic var name = ""
dynamic var picture: NSData? = nil // optionals supported
var dogs = List<Dog>()
}
6.開始對數(shù)據(jù)庫進(jìn)行簡單的增刪改查的操作
//
// HandleData.swift
// HelloSwfit
//
// Created by lidong on 16/6/11.
// Copyright ? 2016年 lidong. All rights reserved.
//
import Foundation
import RealmSwift
/// 處理數(shù)據(jù)
class HandleData {
/**
添加一個(gè)狗
- parameter dog: <#dog description#>
*/
func addDog(dog:Dog){
let realm = RealmUtil.sharedInstance.getRealm()
try! realm.write {
realm.add(dog)
}
}
/**
修改一個(gè)狗的信息
- parameter dog: <#dog description#>
*/
func updateDog(dog:Dog){
let realm = RealmUtil.sharedInstance.getRealm()
try! realm.write {
realm.add(dog,update:true)
}
}
/**
刪除一個(gè)狗的信息
- parameter dog: <#dog description#>
*/
func deleteDog(dog:Dog){
let realm = RealmUtil.sharedInstance.getRealm()
try! realm.write {
realm.delete(dog)
}
}
/**
查詢所有狗的信息
- returns: <#return value description#>
*/
func findAll(code:String) -> RealmSwift.Results<Dog> {
let realm = RealmUtil.sharedInstance.getRealm()
let results = realm.objects(Dog.self).filter("age = \(code)")
return results
}
/**
添加一個(gè)人
- parameter p:
*/
func addPerson(p:Person){
let realm = RealmUtil.sharedInstance.getRealm()
try! realm.write {
realm.add(p)
}
}
/**
查找所有的用戶信息
- returns: <#return value description#>
*/
func findAll() -> RealmSwift.Results<Person>{
let realm = RealmUtil.sharedInstance.getRealm()
let results = realm.objects(Person.self)
return results
}
}
7.在RealmViewController中簡單調(diào)用
//
// RealmDemo.swift
// HelloSwfit
//
// Created by lidong on 16/6/11.
// Copyright ? 2016年 lidong. All rights reserved.
//
import UIKit
import RealmSwift
class RealmDemo:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.whiteColor()
let h = HandleData()
// let dog = Dog()
// dog.age = 2
// dog.name = "gggg"
// h.addDog(dog)
// let dogs1 = List<Dog>()
// dogs1.append(dog)
//
// let person = Person()
// person.name = "lidong"
// person.dogs = dogs1
//
// h.addPerson(person)
let result = h.findAll()
print(result)
}
}