Swift学习第十二枪-移动数据库王者Realm入门教程

今天给大家带来的是堪称是一个可以替代SQLite,Core Data 的以及ORMlibraries的轻量级数据库---Realm移动端数据库。

相比SQLite,Realm更快并且具有很多现代数据库的特性,比如支持JSON,流式api,数据变更通知,以及加密支持,这些都为IOS开发者带来了方便。

Ream提供了五种编程方式的实现。分别是Java,Objective C,Swift,React-Native,tamarin。在前面我着重介绍在Android中的使用。现在来介绍在Swift中得使用。

1 .关于Realm的几个特点:

(1)使用简单,大部分常用的功能(比如插入、查询等)都可以用一行简单的代码轻松完成,学习成本低。
(2)Realm不是基于Core Data,也不是基于SQLite封装构建的。它有自己的数据库存储引擎。
(3)Realm具有良好的跨平台特性,可以在iOS和Android平台上共同使用。代码可以使用 Swift 、 Objective-C 以及 Java 语言来编写。
(4)Realm 还提供了一个轻量级的数据库查看工具(Realm Browser)。你也可以用它进行一些简单的编辑操作(比如插入和删除操作)

2.支持的类型

  1. Realm支持以下的属性类型:Bool、Int8、Int16、Int32、Int64、Double、Float、String、NSDate(精度到秒)以及NSData.
  2. 也可以使用List<object> 和Object来建立诸如一对多、一对一之类的关系模型,此外Object的子类也支持此功能。

3.Realm的安装配置

  1. Realm的官网去下载最新框架:http://static.realm.io/downloads/swift/latest
  2. 拖拽RealmSwift.framework和Realm.framework文件到”Embedded Binaries”选项中。选中Copy items if needed并点击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()
    // 单例  全局的数据访问接口
    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")
       
        // 创建一个有配置的realm
        let realm = try! Realm(configuration: config)
        
        return realm
    
    }
}

5.创建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.开始对数据库进行简单的增删改查的操作

//
//  HandleData.swift
//  HelloSwfit
//
//  Created by lidong on 16/6/11.
//  Copyright © 2016年 lidong. All rights reserved.
//

import Foundation
import RealmSwift
/// 处理数据
class HandleData {
    
    /**
     添加一个狗
     
     - parameter dog: <#dog description#>
     */
    func addDog(dog:Dog){
        let  realm = RealmUtil.sharedInstance.getRealm()
        
        try! realm.write {
            realm.add(dog)
        }
    }
    
    
    /**
     修改一个狗的信息
     - parameter dog: <#dog description#>
     */
    func updateDog(dog:Dog){
        let  realm = RealmUtil.sharedInstance.getRealm()
        try! realm.write {
            realm.add(dog,update:true)
        }
    }
    
    
    
    /**
     删除一个狗的信息
     - 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
    }
    
    
    /**
     添加一个人
     
     - 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中简单调用

//
//  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)
    }
    
}

代码地址:

数据中得数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 前言 由于最近项目中在用Realm,所以把自己实践过程中的一些心得总结分享一下。 Realm是由Y Combina...
    一缕殇流化隐半边冰霜阅读 72,851评论 213 517
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,016评论 4 62
  • 牛人,似乎离我们很远,他们在那个世界拼搏,似乎不费力气就得到了我们想要的一切。我们似乎总是这样想,别人轻轻松松就能...
    静心观情阅读 231评论 2 3
  • 大学时,系里有个女神,追求者甚众。女神不仅长得不错,情商也颇高,不仅挑了个老实听话的24孝男朋友,更还同时和谐地保...
    鲸鱼大布布阅读 7,386评论 15 22
  • 深秋,夜,凉如水, 转眼间已经到了九月份,2017年已经过去了一大半,岁月匆匆,日色匆匆,年初时,曾立下心愿,要发...
    岁月无涯阅读 238评论 0 0