Contents

phimage/valuetransformerkit

A closure and protocol based framework for [`ValueTransformer`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ValueTransformers/ValueTransformers.html), helpful functions to register `ValueTransformer` by identifier.

Create a `ValueTransformer`

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 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.

[stars-shield]: https://img.shields.io/github/stars/phimage/ValueTransformerKit.svg?style=flat [stars-url]: https://github.com/phimage/ValueTransformerKit/stargazers [issues-shield]: https://img.shields.io/github/issues/phimage/ValueTransformerKit.svg?style=flat [issues-url]: https://github.com/phimage/ValueTransformerKit/issues [license-shield]: https://img.shields.io/github/license/phimage/ValueTransformerKit.svg?style=flat [license-url]: https://github.com/phimage/ValueTransformerKit/blob/master/LICENSE [swift-shield]: https://img.shields.io/badge/Swift-5.1-orange.svg?style=flat [swift-url]: https://developer.apple.com/swift/ [build-shield]: https://github.com/phimage/ValueTransformerKit/workflows/CI/badge.svg [build-url]: https://github.com/phimage/ValueTransformerKit/actions?workflow=CI [sponsor-shield]: https://img.shields.io/badge/Sponsor-%F0%9F%A7%A1-white.svg?style=flat [sponsor-url]: https://github.com/sponsors/phimage

Package Metadata

Repository: phimage/valuetransformerkit

Default branch: master

README: README.md