Music_Player3/MusicPlayer/MP/Common/Protocol(公用协议)/CoreDataDelegete.swift
Mr.zhou 96147c5e37 项目:Musicoo
版本:A面 1.0
构建:1.1
更新内容:对项目A面功能的实现,经测试确定各项功能无问题。
更新时间:2024年4月12日 11:20
上传状态:已上传App Connect
2024-04-12 11:19:58 +08:00

92 lines
3.2 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// CoreDataDelegete.swift
// MusicPlayer
//
// Created by Mr.Zhou on 2024/4/1.
//
import Foundation
import CoreData
// MARK: - CoreDataManageableDelegate
///NSFetchRequestResult便
protocol MPCoreDataManageableDelegate: NSFetchRequestResult {
///
static var entityName: String { get }
}
///NSManagedObject
extension MPCoreDataManageableDelegate where Self: NSManagedObject {
//
static var entityName: String {
return String(describing: self)
}
//
static var fetchRequest: NSFetchRequest<Self> {
return NSFetchRequest<Self>(entityName: entityName)
}
}
// MARK: - CoreDataOperationDelegate
///
protocol MPCoreDataOperationDelegate {
//CoreDataManageableDelegate
associatedtype ManagedObject: MPCoreDataManageableDelegate, NSManagedObject
//
static func create() -> ManagedObject
//
static func fetch(_ predicate:NSPredicate) -> [ManagedObject]
//
static func fetchAll() -> [ManagedObject]
//
static func delete(_ object: ManagedObject)
//
static func save()
}
///
extension MPCoreDataOperationDelegate {
///
/// - Returns:
static func create() -> ManagedObject {
//
guard let entity = NSEntityDescription.entity(forEntityName: ManagedObject.entityName, in: MPCoreDataHandlerManager.shared.context) else {
fatalError("Failed to find entity description for \(ManagedObject.entityName)")
}
return ManagedObject(entity: entity, insertInto: MPCoreDataHandlerManager.shared.context)
}
///
/// - Parameter predicate:
/// - Returns:
static func fetch(_ predicate:NSPredicate) -> [ManagedObject] {
let fetchRequest = ManagedObject.fetchRequest
fetchRequest.predicate = predicate
do {
return try MPCoreDataHandlerManager.shared.context.fetch(fetchRequest)
} catch {
print("Failed to fetch \(ManagedObject.entityName): \(error)")
return []
}
}
///
/// - Returns:
static func fetchAll() -> [ManagedObject] {
do {
return try MPCoreDataHandlerManager.shared.context.fetch(ManagedObject.fetchRequest)
} catch {
print("Failed to fetch \(ManagedObject.entityName): \(error)")
return []
}
}
///
/// - Parameter object:
static func delete(_ object: ManagedObject) {
MPCoreDataHandlerManager.shared.context.delete(object)
save()
}
///
static func save() {
MPCoreDataHandlerManager.shared.saveContext()
}
}