Day29 RealmSwift

RealmSwift

今天要介绍 Realm 的 CRUD ,也就是新增、读取、修改、删除的基本操作

延续昨天的,打开 .xcworkspace 档,并 import RealmSwift
https://ithelp.ithome.com.tw/upload/images/20201005/20129677sumUiV5kDd.png
一开始会出现错误,因为专案还没有读取到 RealmSwift 的档案,所以直接按 Command + B ,这样错误就会消失

第一次的 Build 时间会比较久是正常的
https://ithelp.ithome.com.tw/upload/images/20201005/20129677iBJdP0TX7S.png

完成後错误就消失了
https://ithelp.ithome.com.tw/upload/images/20201005/20129677qJLbBfyDnv.png

新增物件档,选择 Cocoa Touch Class
https://ithelp.ithome.com.tw/upload/images/20201005/20129677xCB1tgSCr8.png

Subclass of 输入 Object
https://ithelp.ithome.com.tw/upload/images/20201005/20129677tkdP1Vg9zv.png

完成後再 import RealmSwift
https://ithelp.ithome.com.tw/upload/images/20201005/20129677d76tFsM6um.png

再来输入以下程序码, classA 和 classB 就是 Data 物件的栏位
https://ithelp.ithome.com.tw/upload/images/20201005/20129677D7lLMehNXu.png
primary key 就是物件的主键,不能重复存在
UUID 是电脑自动生成的乱码

回到 ViewController 输入以下程序码

class ViewController: UIViewController {
    
    let realm = try! Realm()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        printDataBase()
    }
    
    @IBAction func createBtnClick(_ sender: UIButton) {
        let result = Data()
        
        // 填入栏位资料
        // 像UUID及Date这种会自动生成的资料,在这里可以不用给
        // Optional 及有预设初始值的也不一定要给值
        result.value = "Hi"
        
        try! realm.write {
            realm.add(result)
        }
    }
    
    @IBAction func readBtnClick(_ sender: UIButton) {
        printDataBase()
    }
    
    @IBAction func updateBtnClick(_ sender: UIButton) {
        // 确认资料库是有资料的
        guard realm.objects(Data.self).count != 0 else { print("nil"); return }
        
        let primaryKey = realm.objects(Data.self)[0].id // 指定资料库的第零比资料
        
        // 透过forPrimaryKey选择需要改动的资料
        let result = realm.object(ofType: Data.self, forPrimaryKey: primaryKey)
        
        try! realm.write {
            result?.value = "Bye"
        }
    }
    
    @IBAction func deleteBtnClick(_ sender: UIButton) {
        // 确认资料库是有资料的
        guard realm.objects(Data.self).count != 0 else { print("nil"); return }
        
        let primaryKey = realm.objects(Data.self)[0].id // 指定资料库的第零比资料
        
        // 透过forPrimaryKey选择需要改动的资料
        let result = realm.object(ofType: Data.self, forPrimaryKey: primaryKey)
        
        try! realm.write {
            realm.delete(result!)
        }
    }
    
    func printDataBase() {
        // 确认资料库是有资料的
        guard realm.objects(Data.self).count != 0 else { print("nil"); return }
        
        realm.objects(Data.self).forEach { (data) in
            print("\(data.id) , \(data.value ?? "nil")")
        }
        
        print("=========================================")
    }
}

我在页面中加入了四个 Button 分别是新增、读取、修改及删除第一笔资料
https://ithelp.ithome.com.tw/upload/images/20201005/20129677IzbstEXZl3.png


<<:  Day 29. 聊聊 Hugo SEO

>>:  Day 28 : 无线智慧装置

JavaScript Day 11. 筛选条件 filter()

阵列中常用的方法还有 filter() 跟 map(),filter() 方法可以根据指定的筛选条件...

[Day 1] php介绍+基础语法

PHP是什麽呢? php一开始全名为Personal Home Page,当初创始人Rasmus L...

Day7 ROS 工具介绍

在前几天我们大概理解了整个 ROS 的架构,接下来要介绍几个 ROS 开发上蛮常用到的工具。 今天主...

【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序

前言 今年算是拖到最後一天最後一刻才开赛... 因为疫情的关系今年实在有点忙不过来, 因此早在两个月...

iOS App开发 OC 第二天, 属性 @property 的特性(attribute)

从Swift 到 OC 第二天, 属性 @property 的特性(attribute) tags:...