본문 바로가기

개발/Swift

[Swift/Realm] Object 만들고 가져오기

이번에는 Realm의 기본적인 부분인 Create Read Update Delete를 다뤄보려 합니다.

  • Create : 새 object 추가. realm.add(추가할 object)
  • Read : object 가져오기 realm.object(가져올 object 이름)
  • Update : object를 업데이트 한다. realm.write
  • Delete : 해당 object 삭제 realm.delete(삭제할 object)

설명하면서 개발하면서 빠질 수 없는 커피를 정의해볼거에요.

// Coffee.swift


import RealmSwift
// 1. Realm을 초기화합니다.

let realm = try! Realm()

// 2. 우리가 만들 오브젝트를 정의합니다.
// Coffee이라는 오브젝트를 만들것이고, 커피이름이 담길 name 프로퍼티를 생성합니다.
class Coffee: Object {
  @objc dynamic var name: String = ""
  @objc dynamic var ice: Bool = true
  // 예전에는 @objc dynamic 으로 정의했었지만 이제 @Persisted 로 정의합니다.
}

위에서 정의한 dynamic var 는 동적 변수로서 앱이 실행되고 있을 때 변경사항을 모니터링 할 수 있습니다.

// MyCoffee.swift

import RealmSwift

class MyCoffee {
  let realm = try! Realm()

  // 2. Coffee를 만들고 저장도 해야겠죠?
  // 아니라면 데이터는 DB에 저장되지 않을거에요.
  // saveData 메소드를 만들어 줍니다. Coffee 유형을 받아서 저장할거에요.
  func saveData(object: Coffee) {
      // do-catch 문으로 실패시 오류를 잡을거에요.
    do {
        // 이 부분이 Object를 저장하는 부분입니다.
        // 
        try realm.write({ // write : Update
            realm.add(object) // add : Create
        })
    } catch {
          // 실패시 오류를 출력합니다.
        print("Save ERROR : \(error)")
    }
  }

  // 3. 여기서 Coffee 타입 오브젝트를 초기화 하고 저장할거에요.
  // 따뜻한 아메리카노를 정의해봅시다.
  let text = "따뜻한 아메리카노"
  // Object 초기화
  let myCoffee = Item()
  myCoffee.name = text
  myCoffee.ice = false
  // 초기화한 Object 저장하기.
  saveData(object: myCoffee)

  // 4. 자 이제 우리가 정의한 커피를 불러와봅시다. 
  // Results는 쿼리를 통해 반환된 개체를 자동업데이트하는 컨테이너. 여기에 배열이 담깁니다.
  var coffeeList: Results<Coffee>?

  // 불러온 Object를 Array에 담아주면 coffeeList를 참조하여 
  // 저장된 커피를 가져올 수 있습니다! 
  func loadData() {
      coffeeList = realm.objects(Coffee.self)
  }
반응형