返回 导航

Swift

hangge.com

Swift - 在Realm模型中使用enum类型的属性

作者:hangge | 2018-09-17 08:10
    Realm 是一个十分好用的跨平台移动数据库引擎,我之前也写过相关的使用文章(点击查看)。有网友问:在定义 Realm 数据模型时,里面的属性是否可以是枚举类型(enum)?答案是可以的,下面通过样例进行演示。

1,模型定义

这里定义一个消费记录模型(ConsumeItem),注意模型中如下两个属性:
  • type:用于记录当前的枚举值(私有的,用于 Realm 库的数据存储)
  • consumeType:枚举值的 setter gette 方法(公共的,我们代码中使用这个来访问枚举值)
import Foundation
import RealmSwift

//消费类型枚举
enum ConsumeType: String {
    case shopping = "购物"
    case entertainment = "娱乐"
    case study = "学习"
}

//消费条目
class ConsumeItem:Object {
    //条目名
    @objc dynamic var name = ""
    //金额
    @objc dynamic var cost = 0.00
    //时间
    @objc dynamic var date = Date()
    
    //所属消费类别
    @objc dynamic private var type = ""
    
    //所属消费类别枚举对应的get、set方法
    var consumeType: ConsumeType? {
        get {
            return ConsumeType(rawValue: type)
        }
        set {
            type = newValue?.rawValue ?? ""
        }
    }
}

2,使用样例

(1)效果图
  • 点击“插入数据”按钮后,会往 Realm 库中新增 3 条记录。
  • 点击“获取数据”按钮后,从库中获取所有记录,并输出到控制台中。
          

(2)样例代码
import UIKit
import RealmSwift

class ViewController: UIViewController {
    
    var realm:Realm!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        //使用默认的数据库
        realm = try! Realm()
        //打印出数据库地址
        print(realm.configuration.fileURL ?? "")
    }
    
    //插入数据按钮点击
    @IBAction func addButtonTapped(_ sender: Any) {
        //创建三个消费记录
        let item1 = ConsumeItem()
        item1.name = "买一台电脑"
        item1.cost = 5998.00
        item1.date = Date()
        item1.consumeType = .shopping
        
        let item2 = ConsumeItem()
        item2.name = "看一场电影"
        item2.cost = 30.00
        item2.date = Date(timeIntervalSinceNow: -36000)
        item2.consumeType = .entertainment
        
        let item3 = ConsumeItem()
        item3.name = "买一包泡面"
        item3.cost = 2.50
        item3.date = Date(timeIntervalSinceNow: -72000)
        item3.consumeType = .shopping
        
        // 数据持久化操作(类型记录也会自动添加的)
        try! realm.write {
            realm.add(item1)
            realm.add(item2)
            realm.add(item3)
        }
        print("数据插入完毕!")
    }
    
    //读取数据按钮点击
    @IBAction func readButtonTapped(_ sender: Any) {
        print("开始获取所有数据:")
        //查询所有的消费记录
        let consumeItems = realm.objects(ConsumeItem.self)
        for item in consumeItems {
            print(item)
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
评论

全部评论(0)

回到顶部