Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 웹뷰
- Xcode
- MacOS
- darkmode
- mac
- 개발자
- rxswift
- iOS16
- appstore
- FLUTTER
- Notification
- stack
- Realm
- IOS
- Archive
- UIButton
- Code
- JPA
- Firebase
- view
- 한글
- error
- SwiftUI
- Session
- Python
- window
- Git
- Swift
- Apple
- github
Archives
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) Realm - EEYatHo iOS 본문
반응형
Realm
- github 링크
- NoSQL 데이터베이스
- UserDefaults, CoreData 같은 로컬 DB
- 무료인데, 빠르고, 사용하기 쉽다
- 안드로이드나 Flutter 같은 다른 플랫폼과의 DB 공유도 가능
설치법
- SPM, CocoPods, Carthage 모두 가능하다.
- 설치 방법 링크
사용법
- 모델 선언
import RealmSwift
class Alert: Object {
@objc dynamic var idx: Int = 0
@objc dynamic var time: String = "00:00"
@objc dynamic var isOn: Bool = false
convenience init(time: String) {
self.init()
self.time = time
}
}
- primary key 선언
override static func primaryKey() -> String? {
return "idx"
}
- create
let instance = try! Realm()
// 새로운 객체 생성
let alert = Alert(time: "11:30")
// write transaction block
try! instance.write {
instance.add(alert)
}
- readAll, read
// readAll
let result = instance.objects(Alert.self)
let arr = Array(result) // to Swift Array
// read one (filter)
let query = NSPredicate(format: "idx = %@", 20)
let alert = result.filter(query)
- sort
let sortedAlerts = instance.objects(Alert.self)
.sorted(byKeyPath: "idx", ascending: true)
- update
예시 ) 특정 idx 의 alert 를 update 하기
func updateAlert(idx: Int, time: String, isOn: Bool) {
if let alert = instance.objects(Alert.self).filter(NSPredicate(format: "idx == %d", idx)).first {
try? instance.write {
alert.time = time
alert.isOn = isOn
}
} else {
print("updateAlert not found error")
}
}
- delete
예시 ) 특정 idx 의 alert 를 delete 하기
func deleteAlert(idx: Int) {
if let alert = instance.objects(Alert.self).filter(NSPredicate(format: "idx == %d", idx)).first {
try? instance.write {
instance.delete(alert)
}
} else {
print("deleteAlert not found error")
}
}
Realm 특징
- 특정 객체의 인스턴스를 생성한 후, 해당 객체를 DB 프록시 내에서 변경할 경우, 이미 꺼낸 인스턴스도 업데이트 된다.
- 메인 쓰레드에서만 transaction block 에 접근 가능하다.
try? instance.write {
alert.time = time
alert.isOn = isOn
}
- Auto increment 지원 안해준다.
직접 구현해야한다.
예시 ) create + auto increment
func createAlert(time: String, isOn: Bool) {
var idx = 0
if let lastAlert = instance.objects(Alert.self).last {
idx = lastAlert.idx + 1
}
let alert = Alert()
alert.idx = idx
alert.time = time
alert.isOn = isOn
try? instance.write {
instance.add(alert)
}
}
추가
'iOS, Swift' 카테고리의 다른 글
Swift ) 랜덤함수, 임의의 수 - EEYatHo iOS (0) | 2021.03.23 |
---|---|
Swift ) CoreData 특정 Entity 총 갯수 구하기 - EEYatHo iOS (0) | 2021.03.23 |
Swift ) Realm 사용시 쓰레드 주의사항 - EEYatHo iOS (0) | 2021.03.23 |
Swift ) UIButton in Cell not working - EEYatHo iOS (0) | 2021.03.22 |
Swift ) .system타입 UIButton setTitle 애니메이션 없애기 - EEYatHo iOS (0) | 2021.03.22 |
Comments