iOS開發(fā)swift -- Realm入門

一 關(guān)于Realm

1、Realm 是一個跨平臺的移動數(shù)據(jù)庫引擎谴返,為移動應(yīng)用的數(shù)據(jù)持久化而生煞肾。其目的是要取代 Core Data 和 SQLite。
2嗓袱、特點(diǎn):
(1)使用簡單籍救,大部分常用的功能(比如插入、查詢等)都可以用一行簡單的代碼輕松完成渠抹,易學(xué)習(xí)蝙昙。
(2)Realm 不是基于 Core Data,也不是基于 SQLite 封裝構(gòu)建的梧却。它有自己的數(shù)據(jù)庫存儲引擎奇颠。
(3)Realm 具有良好的跨平臺特性,可以在 iOS 和 Android 平臺上共同使用放航。代碼可以使用 Swift 烈拒、 Objective-C 以及 Java 語言來編寫。
(4)Realm 還提供了一個輕量級的數(shù)據(jù)庫查看工具(Realm Browser)广鳍。你也可以用它進(jìn)行一些簡單的編輯操作(比如插入和刪除操作)

中文文檔
英文文檔

二 sdk集成 CocoaPods

$ cd/你的項目地址
$ open -e Podfile

target '你的app' do
    pod 'RealmSwift'
end

$ pod install

三 數(shù)據(jù)類型

(1)Realm支持以下的屬性類型:Bool荆几、Int8、Int16赊时、Int32吨铸、Int64、Double祖秒、Float焊傅、String剂陡、NSDate 、以及NSData.CGFloat 屬性被取消了狐胎,因?yàn)樗念愋筒灰蕾囉谄脚_鸭栖。
String、NSDate以及 NSData類型的屬性都可以添加可選值握巢。Object
類型的屬性必須設(shè)置為可選晕鹊。存儲可空數(shù)字可以通過 Realm 可選值來實(shí)現(xiàn)。
(2)關(guān)系
Object 能夠借助 Object以及 List屬性來和另一個 Object建立聯(lián)系暴浦。 List 的接口和 Array非常類似溅话,在 List中的對象能夠通過索引下標(biāo)(indexed subscripting)進(jìn)行訪問。 與 Array所不同的是歌焦,List其中只能存放簡單的 Object子類類型飞几。

//Realm數(shù)據(jù)模型是基于標(biāo)準(zhǔn) Swift 類來進(jìn)行定義的,使用屬性來完成模型的具體定義独撇。通過簡單的繼承 Object 或者一個已經(jīng)存在的模型類屑墨,您就可以創(chuàng)建一個新的 Realm 數(shù)據(jù)模型對象。
//由于 Realm 中定義的所有模型在程序啟動時就會被解析纷铣,所以即使代碼中沒有調(diào)用卵史,它們都需要被初始化。在 Swift 中使用 Realm 的時候搜立,Swift.reflect(_:)函數(shù)可用于確定您模型中的信息以躯,這需要確保 init()已被成功調(diào)用。這意味著所有非可選的屬性必須添加一個默認(rèn)值啄踊。

import RealmSwift

//類型
class ConsumeType:Object {
    //類型名
    dynamic var name = ""
}

//詳情
class ConsumeItem:Object {
    //條目名
    dynamic var name = ""
    //金額
    dynamic var cost = 0.00
    //時間
    dynamic var date = Date()
    //所屬消費(fèi)類別
    dynamic var type:ConsumeType?
}

四 創(chuàng)建數(shù)據(jù)庫

        //使用默認(rèn)數(shù)據(jù)庫
        let realm = try! Realm()
    
        //使用其他數(shù)據(jù)庫
        let config = Realm.Configuration(
            // 獲取需要打包文件的 URL 路徑
            fileURL: Bundle.main.url(forResource: "MyBundledData", withExtension: "realm"),
            // 以只讀模式打開文件忧设,因?yàn)閼?yīng)用數(shù)據(jù)包并不可寫
            readOnly: true)
        let realm = try! Realm(configuration: config)
        //內(nèi)存數(shù)據(jù)庫 通常情況下,Realm 數(shù)據(jù)庫是存儲在硬盤中的颠通,但是您能夠通過設(shè)置 inMemoryIdentifier 而不是設(shè)置Realm.Configuration 中的 fileURL 屬性见转,以創(chuàng)建一個完全在內(nèi)存中運(yùn)行的數(shù)據(jù)庫。內(nèi)存數(shù)據(jù)庫在每次程序運(yùn)行期間都不會保存數(shù)據(jù)蒜哀。但是,這不會妨礙到 Realm 的其他功能吏砂,包括查詢撵儿、關(guān)系以及線程安全
        let realm = try! Realm(configuration: Realm.Configuration(inMemoryIdentifier: "MyInMemoryRealm"))

五 數(shù)據(jù)增刪改查

    func addCilck(){
        let type1 = ConsumeType()
        type1.name = "衣服"
        let type2 = ConsumeType()
        type2.name = "飲食"
        
        //創(chuàng)建數(shù)據(jù)記錄 可使用數(shù)組創(chuàng)建
        let item1 = ConsumeItem(value: ["水果",5999.00,Date(),type1]) 
        
        let item2 = ConsumeItem()
        item2.name = "電影"
        item2.cost = 30.00
        item2.date = Date(timeIntervalSinceNow: -36000)
        item2.type = type2
       
        // * 三次處理事物 會發(fā)送三次通知
        
        //增加
        try! realm?.write({
            realm?.add(item1)
            realm?.add(item2)
        })
        
        //更新
        try! realm?.write({
            item3.name = "dog"
        })
        
        //查詢
        let item4 = realm?.objects(ConsumeItem.self).filter("cost = 5999")

        //刪除
        try!realm?.write({
            realm?.delete(item4!)
        })
    }

六 通知

    var token : NotificationToken? = nil

    override func viewDidLoad() {
        super.viewDidLoad()

        //集合通知
        let result = realm?.objects(ConsumeItem.self)
        token = result?.addNotificationBlock({ (changes: RealmCollectionChange) in
            switch changes {
            case .initial:
                //Results 現(xiàn)在已經(jīng)填充完畢,可以不需要阻塞 UI 就可以被訪問
                debugPrint("initial initial")
                break
            case .update(_, deletions: _, insertions: _, modifications: _):
                //數(shù)據(jù)庫發(fā)生更改(增刪改)調(diào)用
                debugPrint("update update")
                break
            default:
                break  
            } 
        })
        
        //打印出數(shù)據(jù)庫地址
        print(Realm.Configuration.defaultConfiguration.fileURL ?? "nil")        
    }

    deinit {
        token?.stop()
    }

如有不妥狐血,請多多指教:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淀歇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匈织,更是在濱河造成了極大的恐慌浪默,老刑警劉巖牡直,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纳决,居然都是意外死亡碰逸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門阔加,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饵史,“玉大人,你說我怎么就攤上這事胜榔「炫纾” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵夭织,是天一觀的道長吭露。 經(jīng)常有香客問我,道長尊惰,這世上最難降的妖魔是什么讲竿? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮择浊,結(jié)果婚禮上戴卜,老公的妹妹穿的比我還像新娘。我一直安慰自己琢岩,他們只是感情好投剥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著担孔,像睡著了一般江锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糕篇,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天啄育,我揣著相機(jī)與錄音,去河邊找鬼拌消。 笑死挑豌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墩崩。 我是一名探鬼主播氓英,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鹦筹!你這毒婦竟也來了铝阐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铐拐,失蹤者是張志新(化名)和其女友劉穎徘键,沒想到半個月后练对,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吹害,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年螟凭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赠制。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡赂摆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钟些,到底是詐尸還是另有隱情烟号,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布政恍,位于F島的核電站汪拥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篙耗。R本人自食惡果不足惜迫筑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宗弯。 院中可真熱鬧脯燃,春花似錦、人聲如沸蒙保。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邓厕。三九已至逝嚎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間详恼,已是汗流浹背补君。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昧互,地道東北人挽铁。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像敞掘,于是被迫代替她去往敵國和親叽掘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

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