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

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

作者: 请叫我小东子 | 来源:发表于2016-06-11 15:05 被阅读181次

    今天给大家带来的是堪称是一个可以替代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)
        }
        
    }
    
    

    代码地址:

    数据中得数据

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/idxedttx.html