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()
ValueTransformerKit
A closure and protocol based framework for
ValueTransformer
, helpful functions to registerValueTransformer
by identifier.See Some implementations
Create a
ValueTransformer
Using closures
A
ValueTransformer
subclass is no more necessary using this method.Using protocol implementation
Implement
ValueTransformerType
orResersableValueTransformerType
and an a computed propertytransformer
will be accessible.Using enum
Define your
enum
, a list of all your enum case intransformers
, implement the functiontransformedValue
ofValueTransformerType
protocolRegister it
You can retrieve a value transformer using optional initializer of
ValueTransformer
:init?(forName: NSValueTransformerName)
A protocol
ValueTransformerRegisterable
help you to register yourValueTransformer
By providing a value transformer and an identifiername
, a new method will be availableSo just defined an identifier
name
in yourValueTransformerType
For a singleton instance
You can define a singleton instance using
ValueTransformerSingleton
or a static function will help you to register it
For the previous enum example
then you can register one by one
or all case
Some implementations
String
Image
Date and Time
DateFormatter.Style
Number
NumberFormatter.Style
Locale component
NSLocale.Key
Check if empty or not
IsEmpty
(resp.IsNotEmpty
) you could transformString
,NSString
,Array
,NSArray
,Dictionnary
, etc… to boolean.true
(resp.false
) if emptyApple Doc
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ValueTransformers/ValueTransformers.html
License
ValueTransformerKit is available under the MIT license. See the LICENSE file for more info.