У меня есть приложение todo, которое я использую для хранения данных. Я написал коды базы данных для записи в базу данных и получить. Я также работал над этим конкретным проектом ранее как одностраничный код, но теперь я хочу улучшить его, используя подход MVC. это мои коды.
//MARK:- Create Category
func createCategory(name: String, color: String, isCompleted: Bool) -> Void {
category.name = name
category.color = color
category.isCompleted = false
DBManager.instance.addData(object: category)
}
//MARK:- Read Category
func readCategory(completion: @escaping CompletionHandler) -> Void {
DBManager.instance.getDataFromDB().forEach({ (category) in
let category = CategoryModel()
Data.categoryModels.append(category)
})
}
Модель базы данных
private init() {
database = try! Realm()
}
func getDataFromDB() -> Results<CategoryModel> {
let categoryArray: Results<CategoryModel> = database.objects(CategoryModel.self)
return categoryArray
}
func addData(object: CategoryModel) {
try! database.write {
database.add(object, update: true)
print("Added new object")
}
}
Ячейка TodoList
func setup(categoryModel: CategoryModel) -> Void {
categoryNameLabel.text = categoryModel.name
}
Контроллер таблицы просмотра Todo
func tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: Constants.CATEGORY_CELL) as! CategoryCell
cell.setup(categoryModel: Data.categoryModels[indexPath.row])
return cell
}
Я могу добавить в базу данных так же, как могу печатать после добавления в базу данных, но я не совсем понимаю, как извлечь добавленные данные.
Без MVC categorylist.swift
let realm = try! Realm()
var categoryArray : Results<Category>?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
//nil coalising operator
return Data.categoryModels.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//tapping into the super class
let cell = super.tableView(tableView, cellForRowAt: indexPath)
if let category = categoryArray?[indexPath.row] {
cell.textLabel?.text = "#\(category.name)"
guard let categoryColor = UIColor(hexString: category.color) else {fatalError()}
cell.backgroundColor = categoryColor
cell.textLabel?.textColor = ContrastColorOf(categoryColor, returnFlat: true)
}
return cell
}