Swift學(xué)習(xí)第十二槍-移動(dòng)數(shù)據(jù)庫王者Realm入門教程

今天給大家?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.支持的類型

  1. Realm支持以下的屬性類型:Bool、Int8披粟、Int16咒锻、Int32、Int64守屉、Double惑艇、Float、String、NSDate(精度到秒)以及NSData.
  2. 也可以使用List<object> 和Object來建立諸如一對多滨巴、一對一之類的關(guān)系模型思灌,此外Object的子類也支持此功能。

3.Realm的安裝配置

  1. Realm的官網(wǎng)去下載最新框架:http://static.realm.io/downloads/swift/latest
  2. 拖拽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)
    }
    
}

代碼地址:

數(shù)據(jù)中得數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泰偿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜈垮,更是在濱河造成了極大的恐慌耗跛,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攒发,死亡現(xiàn)場離奇詭異调塌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)惠猿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門羔砾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偶妖,你說我怎么就攤上這事蜒茄。” “怎么了餐屎?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵檀葛,是天一觀的道長。 經(jīng)常有香客問我腹缩,道長屿聋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任藏鹊,我火速辦了婚禮润讥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盘寡。我一直安慰自己楚殿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布竿痰。 她就那樣靜靜地躺著脆粥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪影涉。 梳的紋絲不亂的頭發(fā)上变隔,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音蟹倾,去河邊找鬼匣缘。 笑死猖闪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肌厨。 我是一名探鬼主播培慌,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柑爸!你這毒婦竟也來了检柬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤竖配,失蹤者是張志新(化名)和其女友劉穎何址,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體进胯,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡用爪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胁镐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偎血。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盯漂,靈堂內(nèi)的尸體忽然破棺而出颇玷,到底是詐尸還是另有隱情,我是刑警寧澤就缆,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布帖渠,位于F島的核電站,受9級特大地震影響竭宰,放射性物質(zhì)發(fā)生泄漏空郊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一切揭、第九天 我趴在偏房一處隱蔽的房頂上張望狞甚。 院中可真熱鬧,春花似錦廓旬、人聲如沸哼审。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩盾。三九已至,卻和暖如春巩步,著一層夾襖步出監(jiān)牢的瞬間旁赊,已是汗流浹背桦踊。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工椅野, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓竟闪,卻偏偏與公主長得像离福,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子炼蛤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 前言 由于最近項(xiàng)目中在用Realm妖爷,所以把自己實(shí)踐過程中的一些心得總結(jié)分享一下。 Realm是由Y Combina...
    一縷殤流化隱半邊冰霜閱讀 72,973評論 213 517
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫理朋、插件絮识、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,065評論 4 62
  • 牛人,似乎離我們很遠(yuǎn)嗽上,他們在那個(gè)世界拼搏次舌,似乎不費(fèi)力氣就得到了我們想要的一切。我們似乎總是這樣想兽愤,別人輕輕松松就能...
    靜心觀情閱讀 234評論 2 3
  • 大學(xué)時(shí)浅萧,系里有個(gè)女神逐沙,追求者甚眾。女神不僅長得不錯(cuò)洼畅,情商也頗高吩案,不僅挑了個(gè)老實(shí)聽話的24孝男朋友,更還同時(shí)和諧地保...
    鯨魚大布布閱讀 7,396評論 15 22
  • 深秋帝簇,夜务热,涼如水, 轉(zhuǎn)眼間已經(jīng)到了九月份己儒,2017年已經(jīng)過去了一大半崎岂,歲月匆匆,日色匆匆闪湾,年初時(shí)冲甘,曾立下心愿,要發(fā)...
    歲月無涯閱讀 240評論 0 0