This commit is contained in:
Vladimir Dubovik
2025-04-03 11:10:21 +03:00
parent 99f2bd8a74
commit 14c229175c
30 changed files with 674 additions and 227 deletions

View File

@ -8,7 +8,7 @@
import Foundation
import CoreData
final class ClassModel: NSManagedObject, Identifiable {
final class CoreDataClassModel: NSManagedObject, Identifiable {
@NSManaged var auditory: String
@NSManaged var professor: String
@NSManaged var subject: String
@ -47,29 +47,29 @@ final class ClassModel: NSManagedObject, Identifiable {
}
// Расширение для загрузки данных из памяти
extension ClassModel {
extension CoreDataClassModel {
// Получаем все данные из памяти
private static var classesFetchRequest: NSFetchRequest<ClassModel> {
NSFetchRequest(entityName: "ClassModel")
private static var classesFetchRequest: NSFetchRequest<CoreDataClassModel> {
NSFetchRequest(entityName: "CoreDataClassModel")
}
// Получаем все данные и сортируем их по дню
// Этот метод будет использоваться на View(ScheduleView), где отображаются пары
static func all() -> NSFetchRequest<ClassModel> {
let request: NSFetchRequest<ClassModel> = classesFetchRequest
static func all() -> NSFetchRequest<CoreDataClassModel> {
let request: NSFetchRequest<CoreDataClassModel> = classesFetchRequest
request.sortDescriptors = [
NSSortDescriptor(keyPath: \ClassModel.day, ascending: true)
NSSortDescriptor(keyPath: \CoreDataClassModel.day, ascending: true)
]
return request
}
}
extension ClassModel {
extension CoreDataClassModel {
@discardableResult
static func makePreview(count: Int, in context: NSManagedObjectContext) -> [ClassModel] {
var classes = [ClassModel]()
static func makePreview(count: Int, in context: NSManagedObjectContext) -> [CoreDataClassModel] {
var classes = [CoreDataClassModel]()
for i in 0..<count {
let _class = ClassModel(context: context)
let _class = CoreDataClassModel(context: context)
_class.subject = "Предмет \(i)"
_class.auditory = "Аудитория \(i)"
_class.professor = "Преподаватель \(i)"
@ -81,11 +81,11 @@ extension ClassModel {
return classes
}
static func preview(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> ClassModel {
static func preview(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> CoreDataClassModel {
return makePreview(count: 1, in: context)[0]
}
static func empty(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> ClassModel {
return ClassModel(context: context)
static func empty(context: NSManagedObjectContext = ClassProvider.shared.viewContext) -> CoreDataClassModel {
return CoreDataClassModel(context: context)
}
}

View File

@ -9,11 +9,11 @@ import Foundation
// MARK: - Welcome
struct Welcome: Decodable {
let choices: [Choice]
let choices: [Subject]
}
// MARK: - Choice
struct Choice: Decodable, Identifiable {
struct Subject: Decodable, Identifiable {
let name: String
let id: String
let group: String

View File

@ -0,0 +1,46 @@
//
// JsonClassModel.swift
// Schedule ICTIS
//
// Created by Mironov Egor on 27.03.2025.
//
import Foundation
import CoreData
final class JsonDataClassModel: NSManagedObject, Identifiable {
@NSManaged var name: String
@NSManaged var group: String
@NSManaged var time: String
@NSManaged var day: Int16
// Здесь мы выполняем дополнительную инициализацию, назначая значения по умолчанию
// Этот метод вызывается всякий раз, когда объект Core Data вставляется в контекст
override func awakeFromInsert() {
super.awakeFromInsert()
setPrimitiveValue("", forKey: "name")
setPrimitiveValue("", forKey: "group")
setPrimitiveValue("", forKey: "time")
setPrimitiveValue(0, forKey: "day")
setPrimitiveValue(0, forKey: "week")
}
}
// Расширение для загрузки данных из памяти
extension JsonClassModel {
// Получаем все данные из памяти
private static var subjectsFetchRequest: NSFetchRequest<JsonClassModel> {
NSFetchRequest(entityName: "JsonClassModel")
}
// Получаем все данные и сортируем их по дню
// Этот метод будет использоваться на View(ScheduleView), где отображаются пары
static func all() -> NSFetchRequest<JsonClassModel> {
let request: NSFetchRequest<JsonClassModel> = subjectsFetchRequest
request.sortDescriptors = [
NSSortDescriptor(keyPath: \JsonClassModel.time, ascending: true)
]
return request
}
}