ValueTransformerKit
A closure and protocol based framework for ValueTransformer
, helpful functions to register ValueTransformer
by identifier.
ValueTransformer
Create a Using closures
let transformer = ValueTransformer.closure { object in
return ...
}
A ValueTransformer
subclass is no more necessary using this method.
Using protocol implementation
Implement ValueTransformerType
or ResersableValueTransformerType
and an a computed property transformer
will be accessible.
Using enum
Define your enum
, a list of all your enum case in transformers
, implement the function transformedValue
of ValueTransformerType
protocol
enum StringTransformers: String, ValueTransformers, ValueTransformerType {
case capitalized, lowercased, uppercased
public static let transformers: [StringTransformers] = [.capitalized, .lowercased, .uppercased]
public func transformedValue(_ value: Any?) -> Any? { ../* string manipulation */ }
}
Register it
You can retrieve a value transformer using optional initializer of ValueTransformer
: init?(forName: NSValueTransformerName)
A protocol ValueTransformerRegisterable
help you to register your ValueTransformer
By providing a value transformer and an identifier name
, a new method will be available
myValueTransformer.register()
So just defined an identifier name
in your ValueTransformerType
struct MyTransformer: ValueTransformerType, ValueTransformerRegisterable {
var name = NSValueTransformerName(rawValue: "MyTransformation")
For a singleton instance
You can define a singleton instance using ValueTransformerSingleton
struct MyTransformer: ValueTransformerType, ValueTransformerRegisterable, ValueTransformerSingleton {
var name = NSValueTransformerName(rawValue: "MyTransformation")
public static let instance = MyTransformer()
or a static function will help you to register it
MyTransformer.register() // same as MyTransformer.instance.register()
For the previous enum example
enum StringTransformers: String, ValueTransformers, ValueTransformerType {
...
var name: NSValueTransformerName {
return NSValueTransformerName("String" + self.rawValue.capitalized)
}
then you can register one by one
StringTransformers.capitalized.register()
or all case
StringTransformers.register()
Some implementations
String
- capitalized
- uppercased
- lowercased
Image
- PNG Representation
- JPEG Representation
Date and Time
- RFC 2822 Timestamp*
- Using
DateFormatter.Style
Number
- Using
NumberFormatter.Style
Locale component
- Using
NSLocale.Key
Check if empty or not
- Using
IsEmpty
(resp.IsNotEmpty
) you could transformString
,NSString
,Array
,NSArray
,Dictionnary
, etc... to boolean.true
(resp.false
) if empty
Apple Doc
License
ValueTransformerKit is available under the MIT license. See the LICENSE file for more info.