ios개발

swift Realm 기본 사용법과 예제 - 저장하기, 꺼내기, 업데이트, filter

studying develop 2021. 8. 9. 13:49

1. podfile에 두개를 추가해주고, pod upate를 합니다.

  pod 'Realm'
  pod 'RealmSwift'

 

2. 그리고 저장하려는 데이터의 타입에 맞춰 모델을 선언해 줍니다.

import RealmSwift

class GoalInfoModel: Object {
    @objc dynamic var goalWeight: Double = 0
}

 

3. 그리고 이제 저장과 꺼내기, 업데이트를 관리할 클래스를 생성합니다.

RealmSwift를 임포트 하고

realmInstance를 아래처럼 선언합니다.

 

그리고 저장은 add를 통해서 하고, 꺼내는 것은 objects를 통해 할 수 있습니다. 이때 원리는 해당 오브젝트 타입으로 저장된 모든 객체들이 꺼내지므로, first를 통해 그중에 가장 먼저 저장된 것을 꺼내는 방식입니다. 

 

그리고 update는 기존의 저장된 것에 덮어씌우기 위해 기존것을 지우고 새로 저장하도록 한 메소드입니다.


import RealmSwift

class RealmManager {
    
    let realmInstance = try! Realm()
    
    private func saveGoalInfoModelToRealm(data: GoalInfoModel) {
        let model = GoalInfoModel()
        
        model.goalWeight = data.goalWeight
        
        try! realmInstance.safeWrite {
            realmInstance.add(model)
        }
    }
    
    func getGoalInfoModelToRealm() -> GoalInfoModel? {
        if let realmInfo = realmInstance.objects(GoalInfoModel.self).first {
            return realmInfo
        }
        
        return nil
    }
    
    func updateGoalInfoModelToRealm(data: GoalInfoModel) {
        if let realmInfo = realmInstance.objects(GoalInfoModel.self).first {
            try! realmInstance.safeWrite {
                realmInstance.delete(realmInfo)
                self.saveGoalInfoModelToRealm(data: data)
            }
        } else {
            self.saveGoalInfoModelToRealm(data: data)
        }
    }
}

 

데이터를 꺼낼때 filter를 이용하여 원하는 조건의 데이터를 꺼낼 수도 있습니다.

import RealmSwift

class RealmManager {
    
    let realmInstance = try! Realm()
    
    func getGoalInfoModelToRealm() -> GoalInfoModel? {
        if let realmInfo = realmInstance.objects(GoalInfoModel.self).filter({
            return $0 > 10
        }) {
            return realmInfo
        }
        
        return nil
    }
}