From 3f268e8376dfbbe6da393779f96b1f17deb8e148 Mon Sep 17 00:00:00 2001 From: John Rommel Estropia Date: Sun, 21 May 2017 09:06:29 +0900 Subject: [PATCH] added NSManagedObject.setValue(_:forKvcKey:willSetValue:didSetValue:) --- Sources/NSManagedObject+Convenience.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Sources/NSManagedObject+Convenience.swift b/Sources/NSManagedObject+Convenience.swift index f9d206c..2e648c4 100644 --- a/Sources/NSManagedObject+Convenience.swift +++ b/Sources/NSManagedObject+Convenience.swift @@ -155,16 +155,19 @@ public extension NSManagedObject { - parameter value: the value to set the KVC key with - parameter KVCKey: the KVC key - parameter willSetValue: called before accessing `setPrimitiveValue(forKey:)`. Callers are allowed to cancel the mutation by throwing an error, for example, for custom validations. + - parameter didSetValue: called after executing `setPrimitiveValue(forKey:)`. */ @nonobjc @inline(__always) - public func setValue(_ value: T, forKvcKey KVCKey: KeyPath, willSetValue: (T) throws -> Any?) rethrows { + public func setValue(_ value: T, forKvcKey KVCKey: KeyPath, willSetValue: (T) throws -> Any?, didSetValue: (Any?) -> Void = { _ in }) rethrows { self.willChangeValue(forKey: KVCKey) defer { self.didChangeValue(forKey: KVCKey) } - self.setPrimitiveValue(try willSetValue(value), forKey: KVCKey) + let transformedValue = try willSetValue(value) + self.setPrimitiveValue(transformedValue, forKey: KVCKey) + didSetValue(transformedValue) } /**