2024-12-12
realm是移动数据库,基于SQLite。
2019年被MongoDB收购,更名为Atlas SDK, 2024年9月正式弃用(不再更新) 。
以前用realm browser,现在最新工具是realm-studio
用SPM安装。地址就是github网站的地址。
realm或者realmswift安装包选一个,不能两个都选,会报错。
我选的是realswift
。
打开AppDelegate,在didFinishLaunchingWithOptions下面输入:
//打印数据文件的地址,通常是一个default.realm文件,用real-studio打开
print(Realm.Configuration.defaultConfiguration.fileURL)
创建新的swift文件,比如CategoryTitle.swift
import Foundation
import RealmSwift
class CategoryTitle: Object{
@objc dynamic var name: String = ""
//后向关系
let items = List<Item>()
}
比如里面有items,可以定义Item.swift
import Foundation
import RealmSwift
class Item: Object{
@objc dynamic var title: String = ""
@objc dynamic var done: Bool = false
//前向关系
var parentCategory = LinkingObjects(fromType: CategoryTitle.self, property: "items")
}
import RealmSwift
在vieController声明:
let realm = try! Realm()
var categories:Results<CategoryTitle>? //使用realm的Results变量
addButton里面添加:
let newCategory = CategoryTitle()
newCategory.name = textField.text!
self.save(category: newCategory)
save()的声明
func save(category: CategoryTitle){
do{
try realm.write{
realm.add(category)
}
} catch {
print("Error Saving CategoryTitles \(error)")
}
tableView.reloadData()
}
用realm.objects()
func loadCategories(){
categories = realm.objects(CategoryTitle.self)
tableView.reloadData()
}
用realm.write{}
if let item = todoItems?[indexPath.row]{
do{
try realm.write{
item.done = !item.done
}
}catch{
print("Error saving done status, \(error)")
}
}
tableView.reloadData()
用realm.write{remove.delete(item)}
if let item = todoItems?[indexPath.row]{
do{
try realm.write{
realm.delete(item)
}
}catch{
print("Error saving done status, \(error)")
}
}
tableView.reloadData()
过滤关键字逻辑和CoreData一致。
todoItems = todoItems?.filter("title CONTAINS[cd] %@", searchBar.text!).sorted(byKeyPath: "dateCreated", ascending: true)
tableView.reloadData()
注意,如果你增加属性后,xcode会报错。解决方案是删除目前这个app,重新run一次。旧的数据就会被删除,启用新数据库。
2023年推出swiftData,特别适配SwiftUI
Firebase
参考: