swift -Realm 예제 2 - ToDoList 일대다 관계
✅ 사용자 모델 생성
//User Model
import RealmSwift
import UIKit
class User: Object {
@objc dynamic var id : Int = 0
@objc dynamic var name : String = ""
@objc dynamic var idCard: IDCard?
//User 객체와 Todo 객체의 콜렉션을 연결하는 To-Many
let todos = List<Todo>()
var hasTodos:Bool{
return todos.count > 0
}
convenience init(id: Int, name: String) {
self.init()
self.id = id
self.name = name
}
//기본키 설정
override class func primaryKey() -> String? {
return "id"
}
/*
3. id, name을 인덱스 속성으로 설정합니다.
indexedProperties 메소드를 재정의하여 인덱스 속성을 설정할 수 있습니다.
이는 데이터베이스를 필터링하거나 쿼리를 할 때의 시간을 개선하기 위해 사용됩니다.
쓰기 속도는 약간 느리게 하므로, 상황에 맞게 사용하면 됩니다.
*/
//재정의하여 인덱스에 추가 속성을 설정
override class func indexedProperties() -> [String] {
return ["id" , "name"]
}
}
✅ 할일 모델 생성
//Todo Model
import UIKit
import RealmSwift
class Todo: Object {
@objc dynamic var title: String = "" //제목
@objc dynamic var desc : String = "" //설명
//LinkingObjects를 이용하여 User 객체에 대한 백링크(backlinks)를 만들었습니다.
//현재 Todo 객체에 어떤 User 객체가 연결되어 있는지 알려주는 속성입니다.
let ofUser = LinkingObjects(fromType: User.self, property: "todos")
convenience init(title: String, desc: String) {
self.init()
self.title = title
self.desc = desc
}
}
✅ IDCard 모델 생성
import RealmSwift
import UIKit
class IDCard: Object {
@objc dynamic var idNumber : String = ""
@objc dynamic var expiryDate: Date = Date.distantFuture
let ofUser = LinkingObjects(fromType: User.self, property: "idCard")
convenience init(idNumber: String) {
self.init()
self.idNumber = idNumber
}
}
✅ TODO 리스트 저장 - SAVE
//Todo 저장
func startSaveTodoList(){
let todoRealm = try! Realm()
//TODO..
let todo1 = Todo(title: "제목1111", desc: "설명1111")
let todo2 = Todo(title: "제목2222", desc: "설명222222")
//ID CARD
let idCard1 = IDCard(idNumber: "0001")
let idCard2 = IDCard(idNumber: "0002")
let idCard3 = IDCard(idNumber: "0003")
let user1 = User(value: ["id" : 1 , "name": "user1" , "idCard": idCard1])
user1.todos.append(todo1)
let user2 = User(id: 2, name: "user2")
user2.todos.append(todo2)
user2.idCard = idCard2
let user3 = User()
user3.id = 3
user3.name = "user3"
user3.todos.append(objectsIn: [todo1 , todo2])
user3.idCard = idCard3
try! todoRealm.write{
todoRealm.add([user1 , user2 , user3])
}
}
✅ TodoList 조회 - SELECT
//조회
func fetchTodoList() {
let realmUser = try! Realm()
//let users = realmUser.objects(User.self)
//기본키 사용
let user = realmUser.object(ofType: User.self, forPrimaryKey: 1)
print("todoList == = = ")
//필터링 오브젝트"
let userss = realmUser.objects(User.self).filter("name == 'user1' ")
print(userss.first ?? nil)
let userss2 = realmUser.objects(User.self).filter("id IN {1,2}")
print(userss2)
}
✅ 업데이트 - UPDATE
//업데이트
func updateTotoList() {
let updateRealm = try! Realm()
let user = updateRealm.object(ofType: User.self, forPrimaryKey: 1)
try! updateRealm.write{
user?.name = "kkkang"
}
}
✅ 삭제 - DELETE
//삭제
func deleteTodoList() {
let deleteRealm = try! Realm()
let user33 = deleteRealm.object(ofType: User.self, forPrimaryKey: 1)
if let deleUser = user33{
try! deleteRealm.write{
deleteRealm.delete(deleUser)
}
}
}
'아이폰 개발 > Swift' 카테고리의 다른 글
swift - tableViewController MVVM 으로 만들기 (0) | 2021.04.19 |
---|---|
swift 공통 로그 (0) | 2021.04.14 |
swift -Realm 예제 1 - 단순 CRUD (0) | 2021.04.12 |
swift alamofire 예제 (0) | 2021.04.05 |
swift socket io 예제 (0) | 2021.03.31 |