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)