Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
반응형
Archives
Today
Total
관리 메뉴

슈프림 블로그

[iOS/Swift] XCode 프로젝트에서 RealmSwift 사용하기 2 본문

iOS_Swift

[iOS/Swift] XCode 프로젝트에서 RealmSwift 사용하기 2

_슈프림 2020. 9. 21. 13:23
728x90

XCode에서 Realm 사용할 준비 하고 오기!!

2020/09/19 - [iOS_Swift] - [iOS/Swift] XCode 프로젝트에서 Realm 사용하기 1

 

[iOS/Swift] XCode 프로젝트에서 Realm 사용하기 1

Realm이란? Realm 발음은 주변분들 보면 [렘]이라고 발음하시는 분들도 있고 [렐름]이라고 발음하시는 분들도 있었다. 나는 [렘]으로 발음하는데, 뭐가 정확한건지는 잘 모르겠다...! 일단 Realm은 모��

tngusmiso.tistory.com

모델 만들기

먼저 데이터로 사용될 모델을 만들어주자.

나는 간단하게 프로젝트 폴더에 Model.swift라는 이름의 파일을 만들어 주었다.

이 공간에 클래스를 선언하여 모델을 만들려고 한다.

 

 

RealmSwift를 import 해주고

클래스는 Object를 상속한다. // 아래에 설명

프로퍼티들은 @objc dynamic var 키워드로 선언한다!

import RealmSwift

class UserRealm: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var age: Int = 0
}

 

Object 클래스

여기서 ObjectRealmSwift 내부에 정의되어 있는 클래스다.

Object를 상속한 사용자 정의 클래스의 인스턴스를 Realm 모델 객체로서 사용 가능하다.

 

Object 클래스에서 사용 가능한 프로퍼티 타입은 다음과 같다.

  • Optional이 가능한 타입 : String, NSString, Date, NSDate, Data, NSData 및 Object 하위 클래스
  • Optional이 불가한 타입 : Int, Int8, Int16, Int32, Int64, Float, Double, Bool, enum 및 List 속성
  • 위의 타입은 모두 @objc dynamic var로 선언되어야 한다.

Object 클래스 프로퍼티에서 숫자값을 Optional로 지정하기 위해서는 RealmOptional 을 사용하면 된다.

    ex) RealmOptional<Int>, RealmOptional<Float>, RealmOptional<Double>, RealmOptional<Bool>

Object 클래스 프로퍼티에서 List는 Optional로 지정할 수 없다.

=> RealmOptionalListlet으로 선언되어야 한다.

 

Object에서는 lazy 프로퍼티를 사용할 수 없다.

 

 

데이터 저장하기

본격적으로 데이터를 저장해보자.

테스트이기 때문에 간단하게 ViewController에서 viewDidLoad() 부분에 작성했다.

실제 프로젝트에서는 이 부분을 함수로 분리에서 필요한 순간에 호출하는 방식으로 구현하면 된다.

 

데이터는 일반적으로 인스턴스를 생성하듯이 생성하면 된다.

// 저장할 데이터 생성
let user = UserRealm()
user.name = "tngusmiso"
user.age = 24
// Realm 불러오기
let realm = try! Realm()
// 데이터 저장하기
try! realm.write {
    realm.add(user)
}
print("users", realm.objects(UserRealm.self)!)

 

데이터 불러오기

.objects(_:) 를 사용하면 데이터를 불러 올 수 있다. 파라미터에 불러올 객체의 데이터 타입을 넣어준다.

.filter(_:) 를 통해서 문자열 쿼리를 사용할 수 있다. (name 프로퍼티가 'tngusmiso' 인 데이터만 필터링 해준다는 의미)

값을 하나만 가져오고 싶으면 .first로 첫번째 값만 가져올 수 있다.

// 데이터 불러오기
let myUser = realm.objects(UserRealm.self).filter("name == 'tngusmiso'").first
print("myUser", myUser!)

 

 

데이터 수정하기

realm.wirte에서 데이터 속성을 수정하면 동일한 객체를 참조하는 다른 인스턴스들에도 자동으로 반영된다.

아래 예제를 보면 myUser를 변경한 것이지만, 동일 객체를 참조하는 sameUserage1로 업데이트 된 것을 확인할 수 있다.

let sameUser = realm.objects(UserRealm.self).filter("name == 'tngusmiso'").first
print("sameUser", sameUser!) // name = "tngusmiso", age = 24

// 데이터 수정하기
try! realm.write {
    myUser?.age = 1
}
print("myUser", myUser!) // name = "tngusmiso", age = 1
print("sameUser", sameUser!) // name = "tngusmiso", age = 1

 

데이터 삭제하기

// 데이터 삭제하기
try! realm.write {
    realm.delete(myUser!)
}

CocoaPods, db, IOS, Realm, RealmSwift, Swift, Xcode, 데이터베이스, 모바일

반응형
Comments