Realm程序示例
import Foundation
import RealmSwift
class 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 Foundation
import RealmSwift
import SwiftUI
class 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)