๋ค์ด๊ฐ๋ฉฐ
์ฌ์ค ๋๋ํ๊ฒ ์ฌ์ฉํ๋ ๊ฑด์ง ์๋์ง ํ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ๋ชจ์์ด ์์ง๋ง, ๊ทธ๋๋ ๋๋ฆ ์ฝ๋ ๊ฐ์ ์ ํด๋ณด๋ ค๊ณ ๋
ธ๋ ฅํ์ผ๋ ๊ธฐ๋ก์ ๋จ๊ฒจ๋ณด๊ฒ ๋ค.... (๊ณ ๋ฏผ์ ํ์ )... Realm์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ฌ์ฉ๋๋ ์ฝ๋๊ฐ ํ์ ์ ์ด๊ณ ๊ฑฐ์ ์ ์ฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ ๊ณณ์ ๋ชจ์์ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํด์ Manager ํ์ผ์ ํ๋ ๋ง๋ค์ด์ ์ฌ์ฉํด๋ณด๊ธฐ๋ก ํ๋ค. ์ ๋ง๋ ๊ฑด์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ทธ๋๋ ํ์คํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ๋ ํธํด์ก๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ๋ฐ๋ก ํ ๋ฒ ์ฝ๋๋ฅผ ์ดํด๋ณด์!
์ฝ๋ ์ดํด๋ณด๊ธฐ
1. ๊ตฌํ๋ถ
// ๊ตฌํ๋ถ
import UIKit
import RealmSwift
protocol DataBase {
func read<T: Object>(_ object: T.Type) -> Results<T>
func write<T: Object>(_ object: T)
func delete<T: Object>(_ object: T)
func sort<T: Object>(_ object: T.Type, by keyPath: String, ascending: Bool) -> Results<T>
}
final class DataBaseManager: DataBase {
static let shared = DataBaseManager()
private let database: Realm
private init() {
self.database = try! Realm()
}
func getLocationOfDefaultRealm() {
print("Realm is located at:", database.configuration.fileURL!)
}
func read<T: Object>(_ object: T.Type) -> Results<T> {
return database.objects(object)
}
func write<T: Object>(_ object: T) {
do {
try database.write {
database.add(object, update: .modified)
print("New Item")
}
} catch let error {
print(error)
}
}
func update<T: Object>(_ object: T, completion: @escaping ((T) -> ())) {
do {
try database.write {
completion(object)
}
} catch let error {
print(error)
}
}
func delete<T: Object>(_ object: T) {
do {
try database.write {
database.delete(object)
print("Delete Success")
}
} catch let error {
print(error)
}
}
func sort<T: Object>(_ object: T.Type, by keyPath: String, ascending: Bool = true) -> Results<T> {
return database.objects(object).sorted(byKeyPath: keyPath, ascending: ascending)
}
}
ํ๋กํ ์ฝ๊ณผ ์ ๋ค๋ฆญ์ ์ด์ฉํด์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ฃผ์๊ณ , ๊ตฌํ์ ํด๋์ค ๋ด์์ ํด์ฃผ์๋ค. ์ฑ๊ธํค ํด๋์ค๋ก ๋ง๋ค์ด์ฃผ์ด์ ํ๋ก์ ํธ ๊ณณ๊ณณ์์ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ์๊ณ , ์ด๊ธฐํ ์์ ์ Realm ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ privateํ๊ฒ ์ ๊ทผ์ ์ ์ดํด์ฃผ์ด์ ๋ถํ์ํ๊ฒ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ง์์ฃผ์๋ค.
2. ์ฌ์ฉ๋ถ
์ฌ์ฉ์ ์๋์ ๊ฐ์ด ํด์ฃผ๋ฉด ๋๋ค.
// ์ฑ๊ธํค ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ
private let database = DataBaseManager.shared
// Realm ํ์ผ ์์น ๊ฐ์ ธ์ค๊ธฐ
database.getLocationOfDefaultRealm()
// Create
let task = Shopping(title: inputTextField.text!, createdAt: Date())
database.write(task)
// Read
shoppingList = database.read(Shopping.self)
// Update
tasks = database.sort(Shopping.self, by: "title")
// Delete
database.delete(self.shoppingList[indexPath.row])
๋ง๋ฌด๋ฆฌ
๋๋ฆ ๋ง๋ค์ด๋ณด์์ ์ฌ์ฉํ์๋๋ฐ ์กฐ๊ธ ๋ ์ข์ ๋ฐฉ์์ ์ฐพ๊ฒ๋๋ฉด ์ ๋ฐ์ดํธ ํ๋๋ก ํ๊ฒ ๋ค.
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] URLSession(1) - ๊ธฐ๋ณธ ํ๋ฆ (2) | 2022.08.30 |
---|---|
[iOS+Network] Swift๋ฅผ ๊ณ๋ค์ธ URL ๊ตฌ์กฐ ๋ถ์ (2) | 2022.08.30 |
[iOS] ์ ์ (dash-line) ๊ทธ๋ฆฌ๊ธฐ (3) | 2022.08.24 |
[iOS] ์ฝ๋๋ก UI ๊ตฌ์ฑํ๊ธฐ - Then ๋ผ์ด๋ธ๋ฌ๋ฆฌ do ๋ฉ์๋ ์ด์ฉ (0) | 2022.08.22 |
[iOS] overriding non-open instance method outside of its defining module (0) | 2022.08.22 |