Music_Player3/relax.offline.mp3.music/MP/Common/Protocol(公用协议)/CoreDataDelegete.swift
2024-07-12 19:33:23 +08:00

118 lines
4.5 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 MP_CoreDataManageableDelegate: NSFetchRequestResult {
///
static var entityName: String { get }
}
///NSManagedObject
extension MP_CoreDataManageableDelegate where Self: NSManagedObject {
//
static var entityName: String {
return String(describing: self)
}
//
static var fetchRequest: NSFetchRequest<Self> {
return NSFetchRequest<Self>(entityName: entityName)
}
}
// MARK: - CoreDataOperationDelegate
///
protocol MP_CoreDataOperationDelegate {
//CoreDataManageableDelegate
associatedtype ManagedObject: MP_CoreDataManageableDelegate, NSManagedObject
//
static func create() -> ManagedObject
//
static func fetch(predicate: NSPredicate?, completion: @escaping ([ManagedObject]) -> Void)
//
static func fetchAll(completion: @escaping ([ManagedObject]) -> Void)
//
static func delete(_ object: ManagedObject)
//
static func save(_ isBackTheard:Bool)
}
///
extension MP_CoreDataOperationDelegate {
///
/// - Returns:
static func create() -> ManagedObject {
//
guard let entity = NSEntityDescription.entity(forEntityName: ManagedObject.entityName, in: MP_CoreDataHandlerManager.shared.context) else {
fatalError("Failed to find entity description for \(ManagedObject.entityName)")
}
return ManagedObject(entity: entity, insertInto: MP_CoreDataHandlerManager.shared.context)
}
/// ()
/// - Parameter predicate:
/// - Parameter completion: 线
static func fetch(predicate: NSPredicate? = nil, completion: @escaping ([ManagedObject]) -> Void) {
let fetchRequest = ManagedObject.fetchRequest
fetchRequest.predicate = predicate
// 使 perform
MP_CoreDataHandlerManager.shared.context.perform {
do {
let results = try MP_CoreDataHandlerManager.shared.context.fetch(fetchRequest)
// 线 completion
DispatchQueue.main.async {
completion(results)
}
} catch {
print("Failed to fetch \(ManagedObject.entityName): \(error)")
DispatchQueue.main.async {
completion([]) //
}
}
}
}
/// ()
/// - Parameter completion: 线
static func fetchAll(completion: @escaping ([ManagedObject]) -> Void) {
let fetchRequest = ManagedObject.fetchRequest
// 使 perform
MP_CoreDataHandlerManager.shared.context.perform {
do {
let results = try MP_CoreDataHandlerManager.shared.context.fetch(fetchRequest)
// 线 completion
DispatchQueue.main.async {
completion(results)
}
} catch {
print("Failed to fetch \(ManagedObject.entityName): \(error)")
DispatchQueue.main.async {
completion([]) //
}
}
}
}
///
/// - Parameter object:
static func delete(_ object: ManagedObject) {
//线
MP_CoreDataHandlerManager.shared.context.perform {
MP_CoreDataHandlerManager.shared.context.delete(object)
save()
}
}
///
static func save(_ isBackTheard:Bool = false) {
if isBackTheard {
MP_CoreDataHandlerManager.shared.saveContextInBackground()
}else {
MP_CoreDataHandlerManager.shared.saveContext()
}
}
}