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)