Realm程序示例
import Foundationimport RealmSwiftclass RealmManage:ObservableObject{ private(set) var localRealm:Realm? //设置localRealm @Published private(set)var tasks:[Task]=[] //设置tasks存放展示的数据 @Published private(set)var temTasks:Set<Task> = [] @Published private(set)var resultTasks:Set<Task>=[] init(){ openRealm() getTasks() } //每次调用realm时初始化的函数 func openRealm(){ do{ let config = Realm.Configuration(schemaVersion:5) { migration, oldSchemaVersion in //当数据库字段更新时,更改schemaVersion版本,数据会自动迁移 if oldSchemaVersion<5{ } } Realm.Configuration.defaultConfiguration = config localRealm = try Realm() }catch{ print("Error opening Realm",error) } } func addTask(taskTitle:String,DDL:Date,Duration:Double,Cost:String,isSplit:Bool,Location:String,Status:String){ if let localRealm = localRealm { do{ try localRealm.write({ let newTask = Task(value: ["name":taskTitle]) localRealm.add(newTask) getTasks() print("add a new task",newTask) }) }catch{ print("Error adding task to Realm:\(error)") } } } //添加函数 func getTasks(){ if let localRealm = localRealm { let allTasks = localRealm.objects(Task.self).sorted(byKeyPath: "DDL") tasks = [] allTasks.forEach { task in tasks.append(task) } } } //得到所有数据的函数 func updateTaskInfo(id:ObjectId,name:String){ if let localRealm = localRealm { do{ let taskToUpdate = localRealm.objects(Task.self).filter(NSPredicate(format: "_id == %@", id)) guard !taskToUpdate.isEmpty else {return} try localRealm.write({ taskToUpdate[0].name = name getTasks() print("Update task with id\(id)!Completed status:\(name)") }) }catch{ print("Error updating task\(id) to realm:\(error)") } } } //更新数据函数 func filterTask(cost:String,location:String){ if let localRealm = localRealm?.objects(Task.self) { getTasks() var inTasks = Set(tasks) if cost != "All" { let filtertest = Set(localRealm.where { ($0.Cost == cost) }) temTasks = [] filtertest.forEach { task in temTasks.insert(task) } inTasks = inTasks.intersection(temTasks) tasks = Array(inTasks) } if location != "All"{ let taskToFilter = Set(localRealm.where { ($0.Location == location) }) temTasks = [] taskToFilter.forEach { task in temTasks.insert(task) } inTasks = inTasks.intersection(temTasks) tasks = Array(inTasks) } if cost == "All" && location == "All"{ getTasks() } } } //筛选函数 func deleteTask(id:ObjectId){ if let localRealm = localRealm { do{ let taskToDelete = localRealm.objects(Task.self).filter(NSPredicate(format: "_id == %@", id)) guard !taskToDelete.isEmpty else{return} try localRealm.write({ localRealm.delete(taskToDelete) getTasks() print("Deleted task with id \(id)") }) }catch{ print("Error deleteing task\(id) to realm\(error)") } } }}//删除函数
数据声明
import Foundationimport RealmSwiftimport SwiftUIclass Task:Object,ObjectKeyIdentifiable{ @Persisted (primaryKey: true) var _id:ObjectId @Persisted var setDate = Date() @Persisted var name = "我是任务名称Missong1"}
使用
@EnvironmentObject var realmManager:RealmManage
打印数据库文件路径
print(Realm.Configuration.defaultConfiguration.fileURL)