import CoreData import Foundation @objc(SetValueTransformer) class SetValueTransformer: ValueTransformer { override class func transformedValueClass() -> AnyClass { return NSData.self } override class func allowsReverseTransformation() -> Bool { return true } override func transformedValue(_ value: Any?) -> Any? { do { guard let value = value else { return nil } return try NSKeyedArchiver.archivedData(withRootObject: value, requiringSecureCoding: true) } catch { os_log("Failed to serialize a Set: %@", log: tplogDebug, type: .default, error as CVarArg) return nil } } override func reverseTransformedValue(_ value: Any?) -> Any? { do { guard let dataOp = value as? Data? else { return nil } guard let data = dataOp else { return nil } let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data) return unarchiver.decodeObject(of: [NSSet.self], forKey: NSKeyedArchiveRootObjectKey) } catch { os_log("Failed to deserialize a purported Set: %@", log: tplogDebug, type: .default, error as CVarArg) return nil } } static let name = NSValueTransformerName(rawValue: "SetValueTransformer") }