Last active
February 8, 2017 16:22
Revisions
-
gonzalezreal revised this gist
Apr 8, 2015 . 1 changed file with 3 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -50,7 +50,7 @@ public extension NSValueTransformer { */ class func setValueTransformerWithName<T, U>(name: String, transform: (T) -> (U?)) { let transformer = ValueTransformer { value in return (value as? T).flatMap { transform($0) as? AnyObject } } @@ -67,11 +67,11 @@ public extension NSValueTransformer { */ class func setValueTransformerWithName<T, U>(name: String, transform: (T) -> (U?), reverseTransform: (U) -> (T?)) { let transformer = ReversibleValueTransformer(transform: { value in return (value as? T).flatMap { transform($0) as? AnyObject } }, reverseTransform: { value in return (value as? U).flatMap { reverseTransform($0) as? AnyObject } }) -
gonzalezreal created this gist
Apr 7, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,81 @@ import Foundation private class ValueTransformer: NSValueTransformer { let transform: (AnyObject?) -> (AnyObject?) init(transform: (AnyObject?) -> (AnyObject?)) { self.transform = transform } // MARK: NSValueTransformer override class func allowsReverseTransformation() -> Bool { return false; } override class func transformedValueClass() -> AnyClass { return NSObject.self } override func transformedValue(value: AnyObject?) -> AnyObject? { return transform(value) } } private class ReversibleValueTransformer: ValueTransformer { let reverseTransform: (AnyObject?) -> (AnyObject?) init(transform: (AnyObject?) -> (AnyObject?), reverseTransform: (AnyObject?) -> (AnyObject?)) { self.reverseTransform = reverseTransform super.init(transform: transform) } // MARK: NSValueTransformer override class func allowsReverseTransformation() -> Bool { return true; } override func reverseTransformedValue(value: AnyObject?) -> AnyObject? { return reverseTransform(value) } } public extension NSValueTransformer { /** Registers a value transformer with a given name and transform function. :param: name The name of the transformer. :param: transform The function that performs the transformation. */ class func setValueTransformerWithName<T, U>(name: String, transform: (T) -> (U?)) { let transformer = ValueTransformer { value in return flatMap(value as? T) { transform($0) as? AnyObject } } self.setValueTransformer(transformer, forName: name) } /** Registers a reversible value transformer with a given name and transform functions. :param: name The name of the transformer. :param: transform The function that performs the forward transformation. :param: reverseTransform The function that performs the reverse transformation. */ class func setValueTransformerWithName<T, U>(name: String, transform: (T) -> (U?), reverseTransform: (U) -> (T?)) { let transformer = ReversibleValueTransformer(transform: { value in return flatMap(value as? T) { transform($0) as? AnyObject } }, reverseTransform: { value in return flatMap(value as? U) { reverseTransform($0) as? AnyObject } }) self.setValueTransformer(transformer, forName: name) } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,9 @@ func stringToInt(value: String) -> Int? { return value.toInt() } func intToString(value: Int) -> String? { return "\(value)" } NSValueTransformer.setValueTransformerWithName("StringToInt", transform: stringToInt, reverseTransform: intToString)