Realm程序示例

  1. import Foundation
  2. import RealmSwift
  3. class RealmManage:ObservableObject{
  4. private(set) var localRealm:Realm?
  5. //设置localRealm
  6. @Published private(set)var tasks:[Task]=[]
  7. //设置tasks存放展示的数据
  8. @Published private(set)var temTasks:Set<Task> = []
  9. @Published private(set)var resultTasks:Set<Task>=[]
  10. init(){
  11. openRealm()
  12. getTasks()
  13. }
  14. //每次调用realm时初始化的函数
  15. func openRealm(){
  16. do{
  17. let config = Realm.Configuration(schemaVersion:5) { migration, oldSchemaVersion in
  18. //当数据库字段更新时,更改schemaVersion版本,数据会自动迁移
  19. if oldSchemaVersion<5{
  20. }
  21. }
  22. Realm.Configuration.defaultConfiguration = config
  23. localRealm = try Realm()
  24. }catch{
  25. print("Error opening Realm",error)
  26. }
  27. }
  28. func addTask(taskTitle:String,DDL:Date,Duration:Double,Cost:String,isSplit:Bool,Location:String,Status:String){
  29. if let localRealm = localRealm {
  30. do{
  31. try localRealm.write({
  32. let newTask = Task(value: ["name":taskTitle])
  33. localRealm.add(newTask)
  34. getTasks()
  35. print("add a new task",newTask)
  36. })
  37. }catch{
  38. print("Error adding task to Realm:\(error)")
  39. }
  40. }
  41. }
  42. //添加函数
  43. func getTasks(){
  44. if let localRealm = localRealm {
  45. let allTasks = localRealm.objects(Task.self).sorted(byKeyPath: "DDL")
  46. tasks = []
  47. allTasks.forEach { task in
  48. tasks.append(task)
  49. }
  50. }
  51. }
  52. //得到所有数据的函数
  53. func updateTaskInfo(id:ObjectId,name:String){
  54. if let localRealm = localRealm {
  55. do{
  56. let taskToUpdate = localRealm.objects(Task.self).filter(NSPredicate(format: "_id == %@", id))
  57. guard !taskToUpdate.isEmpty else {return}
  58. try localRealm.write({
  59. taskToUpdate[0].name = name
  60. getTasks()
  61. print("Update task with id\(id)!Completed status:\(name)")
  62. })
  63. }catch{
  64. print("Error updating task\(id) to realm:\(error)")
  65. }
  66. }
  67. }
  68. //更新数据函数
  69. func filterTask(cost:String,location:String){
  70. if let localRealm = localRealm?.objects(Task.self) {
  71. getTasks()
  72. var inTasks = Set(tasks)
  73. if cost != "All" {
  74. let filtertest = Set(localRealm.where {
  75. ($0.Cost == cost)
  76. })
  77. temTasks = []
  78. filtertest.forEach { task in
  79. temTasks.insert(task)
  80. }
  81. inTasks = inTasks.intersection(temTasks)
  82. tasks = Array(inTasks)
  83. }
  84. if location != "All"{
  85. let taskToFilter = Set(localRealm.where {
  86. ($0.Location == location)
  87. })
  88. temTasks = []
  89. taskToFilter.forEach { task in
  90. temTasks.insert(task)
  91. }
  92. inTasks = inTasks.intersection(temTasks)
  93. tasks = Array(inTasks)
  94. }
  95. if cost == "All" && location == "All"{
  96. getTasks()
  97. }
  98. }
  99. }
  100. //筛选函数
  101. func deleteTask(id:ObjectId){
  102. if let localRealm = localRealm {
  103. do{
  104. let taskToDelete = localRealm.objects(Task.self).filter(NSPredicate(format: "_id == %@", id))
  105. guard !taskToDelete.isEmpty else{return}
  106. try localRealm.write({
  107. localRealm.delete(taskToDelete)
  108. getTasks()
  109. print("Deleted task with id \(id)")
  110. })
  111. }catch{
  112. print("Error deleteing task\(id) to realm\(error)")
  113. }
  114. }
  115. }
  116. }
  117. //删除函数

数据声明

  1. import Foundation
  2. import RealmSwift
  3. import SwiftUI
  4. class Task:Object,ObjectKeyIdentifiable{
  5. @Persisted (primaryKey: true) var _id:ObjectId
  6. @Persisted var setDate = Date()
  7. @Persisted var name = "我是任务名称Missong1"
  8. }

使用

  1. @EnvironmentObject var realmManager:RealmManage

打印数据库文件路径

print(Realm.Configuration.defaultConfiguration.fileURL)