A closure and protocol based framework for ValueTransformer
, helpful functions to register ValueTransformer
by identifier.
See Some implementations
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
Check if empty or not
- Using
IsEmpty
(resp. IsNotEmpty
) you could transform String
, NSString
, Array
, NSArray
, Dictionnary
, etc… to boolean. true
(resp. false
) if empty
Apple 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.
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.