Realm CRUDの実装(作成、Read、更新、削除)
こんにちは!
今日はRealmを実装したCRUDを共有します!
Realm(CRUD)の使用
今日はRealmを実装したCRUDを共有します!
Realm(CRUD)の使用
モデル設計
class RealmEntityTask: Object {
enum ProgressStatus: String {
case todo
case doing
case done
}
@objc dynamic var id: String = ""
@objc dynamic var title: String = ""
@objc dynamic var desc: String = ""
@objc dynamic var deadline: TimeInterval = 0
@objc dynamic var progressStatus = ProgressStatus.todo.rawValue
var progressStatusEnum: ProgressStatus {
get {
return ProgressStatus(rawValue: progressStatus) ?? .todo
}
set {
progressStatus = newValue.rawValue
}
}
// 기본키 지정
override static func primaryKey() -> String? {
return "id"
}
}
なぜ@objc dynamicを貼り付けるのか
Realmでは、モデル属性に@objc dynamicを追加する必要があります.
これは、データベース内のデータのプロパティ・アクセス者を作成するためです.
データベース内のデータにアクセスするには、アクセス者を作成する必要があります.
Create
do {
let realm = try Realm()
// 데이터 추가
try realm.write {
realm.add(task)
}
} catch let error {
print(error)
}
Create or Update
do {
let realm = try Realm()
// 기본키를 지정했다면, 기본키가 같다면 Update가 되고 기본키가 없으면 Create된다.
try realm.write {
realm.add(task, update: .modified)
}
} catch let error {
print(error)
}
Read
var realmEntityTaskList = [RealmEntityTask]()
do {
let realm = try Realm()
// 데이터 가져오기
let fetchDataList = realm.objects(RealmEntityTask.self)
// 가져온 데이터를 할당
fetchDataList
.forEach {
realmEntityTaskList.append($0)
}
} catch let error {
print(error)
}
Update
do {
let realm = try Realm()
// 데이터를 가져와서 필터링
let task = realm.objects(RealmEntityTask.self)
.filter { $0.id == id }
// 데이터 쓰기
try realm.write {
task.first?.title = title
task.first?.desc = description
task.first?.deadline = deadline.timeIntervalSince1970
}
} catch let error {
print(error)
}
Delete
do {
let realm = try Realm()
// 데이터를 가져와서 필터링
let task = realm.objects(RealmEntityTask.self)
.filter { $0.id == id }
// 데이터 삭제
try realm.write {
realm.delete(task.first ?? task[0])
}
} catch let error {
print(error)
}
ありがとう!
Reference
この問題について(Realm CRUDの実装(作成、Read、更新、削除)), 我々は、より多くの情報をここで見つけました
https://velog.io/@qudgh849/Realm-CRUD-구현하기-Create-Read-Update-Delete
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
class RealmEntityTask: Object {
enum ProgressStatus: String {
case todo
case doing
case done
}
@objc dynamic var id: String = ""
@objc dynamic var title: String = ""
@objc dynamic var desc: String = ""
@objc dynamic var deadline: TimeInterval = 0
@objc dynamic var progressStatus = ProgressStatus.todo.rawValue
var progressStatusEnum: ProgressStatus {
get {
return ProgressStatus(rawValue: progressStatus) ?? .todo
}
set {
progressStatus = newValue.rawValue
}
}
// 기본키 지정
override static func primaryKey() -> String? {
return "id"
}
}
do {
let realm = try Realm()
// 데이터 추가
try realm.write {
realm.add(task)
}
} catch let error {
print(error)
}
do {
let realm = try Realm()
// 기본키를 지정했다면, 기본키가 같다면 Update가 되고 기본키가 없으면 Create된다.
try realm.write {
realm.add(task, update: .modified)
}
} catch let error {
print(error)
}
var realmEntityTaskList = [RealmEntityTask]()
do {
let realm = try Realm()
// 데이터 가져오기
let fetchDataList = realm.objects(RealmEntityTask.self)
// 가져온 데이터를 할당
fetchDataList
.forEach {
realmEntityTaskList.append($0)
}
} catch let error {
print(error)
}
do {
let realm = try Realm()
// 데이터를 가져와서 필터링
let task = realm.objects(RealmEntityTask.self)
.filter { $0.id == id }
// 데이터 쓰기
try realm.write {
task.first?.title = title
task.first?.desc = description
task.first?.deadline = deadline.timeIntervalSince1970
}
} catch let error {
print(error)
}
do {
let realm = try Realm()
// 데이터를 가져와서 필터링
let task = realm.objects(RealmEntityTask.self)
.filter { $0.id == id }
// 데이터 삭제
try realm.write {
realm.delete(task.first ?? task[0])
}
} catch let error {
print(error)
}
Reference
この問題について(Realm CRUDの実装(作成、Read、更新、削除)), 我々は、より多くの情報をここで見つけました https://velog.io/@qudgh849/Realm-CRUD-구현하기-Create-Read-Update-Deleteテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol