// // Emoji.swift // CoreDataStack // // Created by sxiaojian on 2021/2/1. // import CoreData import Foundation public final class Emoji: NSManagedObject { public typealias ID = UUID @NSManaged public private(set) var identifier: ID @NSManaged public private(set) var createAt: Date @NSManaged public private(set) var shortcode: String @NSManaged public private(set) var url: String @NSManaged public private(set) var staticURL: String @NSManaged public private(set) var visibleInPicker: Bool @NSManaged public private(set) var category: String? // many-to-one relationship @NSManaged public private(set) var status: Status? } public extension Emoji { override func awakeFromInsert() { super.awakeFromInsert() setPrimitiveValue(UUID(), forKey: #keyPath(Emoji.identifier)) } @discardableResult static func insert( into context: NSManagedObjectContext, property: Property ) -> Emoji { let emoji: Emoji = context.insertObject() emoji.shortcode = property.shortcode emoji.url = property.url emoji.staticURL = property.staticURL emoji.visibleInPicker = property.visibleInPicker return emoji } } public extension Emoji { struct Property { public let shortcode: String public let url: String public let staticURL: String public let visibleInPicker: Bool public let category: String? public init(shortcode: String, url: String, staticURL: String, visibleInPicker: Bool, category: String?) { self.shortcode = shortcode self.url = url self.staticURL = staticURL self.visibleInPicker = visibleInPicker self.category = category } } } extension Emoji: Managed { public static var defaultSortDescriptors: [NSSortDescriptor] { return [NSSortDescriptor(keyPath: \Emoji.createAt, ascending: false)] } }