슈프림 블로그
[iOS/Swift] XCode 프로젝트에서 RealmSwift 사용하기 2 본문
↓↓↓ XCode에서 Realm 사용할 준비 하고 오기!! ↓↓↓
2020/09/19 - [iOS_Swift] - [iOS/Swift] XCode 프로젝트에서 Realm 사용하기 1
모델 만들기
먼저 데이터로 사용될 모델을 만들어주자.
나는 간단하게 프로젝트 폴더에 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 클래스
여기서 Object
는 RealmSwift
내부에 정의되어 있는 클래스다.
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로 지정할 수 없다.
=> RealmOptional
과 List
는 let으로 선언되어야 한다.
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
를 변경한 것이지만, 동일 객체를 참조하는 sameUser
도 age
가 1
로 업데이트 된 것을 확인할 수 있다.
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, 데이터베이스, 모바일
'iOS_Swift' 카테고리의 다른 글
[Swift] Array 관련 함수들 2 (1) | 2020.11.01 |
---|---|
[Swift] Array 관련 함수들 1 (0) | 2020.10.29 |
[iOS/Swift] XCode 프로젝트에서 RealmSwift 사용하기 1 (0) | 2020.09.19 |
[Swift] 객체를 추상화 하는 Struct와 Class 사용법, 차이는 무엇일까? (0) | 2020.08.30 |
[Swift] Closure 클로저가 도대체 뭔데? (0) | 2020.08.04 |