Realm简单使用

749 阅读1分钟

一.简介

Realm 于2014 年7月发布,是一个跨平台的移动数据库引擎,专门为移动应用的数据持久化而生。其目的是要取代 Core Data 和 SQLite。

二.注意点

* Realm 不是基于 Core Data,也不是基于 SQLite 封装构建的。它有自己的数据库存储引擎。
* Realm 具有良好的跨平台特性,可以在 iOS 和 Android 平台上共同使用。
* Realm 还提供了一个轻量级的数据库查看工具(Realm Browser)。你也可以用它进行一些简单的编辑操作(比如插入和删除操作)

三.安装

* 下载:http://static.realm.io/downloads/swift/latest
* 拖拽 RealmSwift.framework 和 Realm.framework 文件到”Embedded Binaries”选项中。选中 Copy items if needed 并点击 Finish

四.使用,这是贴一下简单的封装的方法

import RealmSwift


class NNContact: Object {

    @objc dynamic var id = UUID().uuidString
    @objc dynamic var name = ""
    @objc dynamic var sex = ""
    @objc dynamic var origin_icon = ""
    @objc dynamic var small_icon = ""
    @objc dynamic var fatherName = ""
    @objc dynamic var fatherPhone = ""
    @objc dynamic var remark = ""
    @objc dynamic var tag = ""
    @objc dynamic var createData = Date().string(withFormat: "yyyy/MM/dd-hh:mm:ss")
    
    ///设置索引
    override class func indexedProperties() -> [String] {
        
        return ["name"]
    }
    ///设置主键
    override class func primaryKey() -> String? {
        
        return "id"
    }
}
import RealmSwift

class NNContactViewModel: NSObject {

    static let shared = NNContactViewModel()
    
    let realm = try! Realm()
    
    //增
    func insertContact(_ value: [String: String]) -> Void {
        
        let contact = NNContact(value: value)
        
        try! realm.write {
        
            realm.add(contact)
        }
    }
    
    //删
    func deleteContact(_ contact: NNContact) -> Void {
        
        try! realm.write {
            
            realm.delete(contact)
        }
    }
    
    //改
    func updateContact(_ contactblock: ()->Void) -> Void {
        
        try! realm.write {
            
            contactblock()
        }
    }
    
    //查
    func fetchAllContacts() -> Results<NNContact> {
        
        return realm.objects(NNContact.self)
    }
    
    
    ///存图片至沙盒
    func saveImage(_ image: UIImage, key: String) -> Void {
        
        let documnts = NSHomeDirectory().appendingPathComponent("/Documents")
        let filepath = documnts.appendingPathComponent("\(key).png")
        
        (UIImagePNGRepresentation(image)! as NSData).write(toFile: filepath, atomically: true)
    }
    ///从沙盒取图片
    func fetchImage(_ key: String) -> UIImage? {
        
        let documnts = NSHomeDirectory().appendingPathComponent("/Documents")
        let filepath = documnts.appendingPathComponent("\(key).png")
        return UIImage(contentsOfFile: filepath)
    }
    
    
    func call(withPhone phone: String?) -> Void {
     
        if let tel = phone,
            let url = URL(string: "tel://\(tel)")
        {
            UIApplication.shared.open(url, options: [:], completionHandler: nil)
        }
    }
}

五.官方网站

https://realm.io/