본문 바로가기
아이폰 개발/Swift

swift -Realm 예제 2 - ToDoList 일대다 관계

by 인생여희 2021. 4. 12.

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