Realm
Closed this issue · 1 comments
Youngminah commented
- 모바일용 오픈 소스 객체 데이터베이스 라이브러리
- MongoDB는 NoSQL이다.
장점
- 쿼리 속도가 빠름.
- 현업에서 많이 씀 (카카오 등등 많은 모바일 앱)
- 호환성
CoreData의 한계점
- 애플을 쓰다가 안드로이드로 바꾸면 CoreData를 쓴다면
- 데이터를 유지할 수 없다.
- Realm은 가능함.
Realm에 테이블 만들기 예제
import Foundation
import RealmSwift
class UserDiary: Object {
@Persisted var diaryTtitle: String
@Persisted var content: String?
@Persisted var writeDate = Date()
@Persisted var registerDate = Date()
@Persisted var favorite: Bool
@Persisted(primaryKey: true) var _id: ObjectId
convenience init(diaryTitle: String, content: String?, writeDate: Date, registerDate: Date) {
self.init()
self.diaryTtitle = diaryTitle
self.content = content
self.writeDate = writeDate
self.registerDate = registerDate
self.favorite = false
}
}
Realm에 저장한 테이블 가져오기 예제
let localRealm = try! Realm()
var tasks: Results<UserDiary>!
override func viewDidLoad() {
super.viewDidLoad()
tasks = localRealm.objects(UserDiary.self)
print(tasks[0])
}
- 출력결과
테이블 스키마 구조 자체가 바뀐다면?
- 마이그레이션이 필요하다
- 출시 전까지는 앱을 삭제하고 다시 빌드하는 형태로 사용하면 된다.
필터 쿼리
let realm = try! Realm()
// Access all dogs in the realm
let dogs = realm.objects(Dog.self)
// Filter by age
let puppies = dogs.filter("age < 2")
// Filter by person
let dogsWithoutFavoriteToy = dogs.filter("favoriteToy == nil")
// Filter by person's name
let dogsWhoLikeTennisBalls = dogs.filter("favoriteToy.name == 'Tennis ball'")
특정 수정
try! localRealm.write{
taskToUpdate.diaryTtitle = "수정된 타이틀이예요"
taskToUpdate.content = "일기를 수정하고 계시네여 !!!!!@@"
tableView.reloadData()
}
//밑에는 옛날방법
try! localRealm.write {
localRealm.create(UserDiary.self, value: ["_id" : taskToUpdate._id, "diaryTtitle": "얘만 바꾸고 싶어"], update: .modified)
tableView.reloadData()
}
- 위의 예제가 추천하는 방법
try! localRealm.write {
let update = UserDiary(value: ["_id" : taskToUpdate._id, "diaryTtitle": "얘만 바꾸고 싶어"])
localRealm.add(update, update: .modified)
tableView.reloadData()
}
- 수정한 부분 빼고 나머지는 초기화됨 사라질수 있음 주의!
일괄수정
try! localRealm.write {
tasks.setValue(Date(), forKey: "writeDate")
tasks.setValue("일괄수정된 제목입뉘당", forKey: "diaryTtitle")
tableView.reloadData()
}
삭제
try! localRealm.write {
//deleteImageFromDocumentDirectory(imageName: "\(row._id).png")
localRealm.delete(row)
tableView.reloadData()
}
Youngminah commented