Skip to content

phimage/ValueTransformerKit

Repository files navigation

ValueTransformerKit

Build Status Swift 5.1 Stargazers Issues MIT License Sponsor Become a Patron! Buy me a coffee

A closure and protocol based framework for ValueTransformer, helpful functions to register ValueTransformer by identifier.

See Some implementations

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.

About

ValueTransformer toolkit for swift

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •