Swift Package Index


A framework to transform data like JSON elegantly using the power of Swift programming language.


  • The latest stable release is 1.0.1. Released 2 years ago.
  • The last commit to master was 2 years ago.

Swift Version Compatibility

  • 1.0.1 and master
    5.3
    5.2
    5.1
    5.0
    4.2
Full build results

Platform Compatibility

  • 1.0.1 and master
    iOS
    macOS(Intel)
    macOS(ARM)
    Linux
    tvOS
    watchOS
Full build results

Carthage compatible Platform Swift Package Manager compatible

Transformers is a framework to transform things elegantly using the power of Swift programming language.

Note: Support Swift version: 4.1 or newer

Feature

  • Cast JSON data with type.
  • Cast a swift dictionary to swift model which confirms Codable protocol.
  • Cast a swift array whose item type is dictionary to swift model array whose items confirm Codable protocol.

Installation

Manual

Download the project, and drag the Core folder to your project.

Carthage

Add this to Cartfile

github "webfrogs/Transformers" ~> 1.0

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/webfrogs/Transformers.git", .upToNextMinor(from: "1.0.0")),
]

Usage

The most common scene in iOS programming is handle JSON data.

Handle JSON

let jsonString = """
{"key1": "value2"}
"""
let value1: String? = jsonString.data(using: String.Encoding.utf8)
    .flatMap({$0.toDictionary()})
    .flatMap({$0.value(key: "key1")})
print(value1 ?? "")

RxSwift

If you also use RxSwift in your project. Transformers can be easily integrated with RxSwift, and there is no need to transform JSON data fetched from http server to a model manually. All you have to do is define a model which confirms Codable protocol and use Transformers with the map function provided by RxSwift.

Here is a demo code:

struct GithubAPIResult: Codable {
    let userUrl: String
    let issueUrl: String

    enum CodingKeys: String, CodingKey {
        case userUrl = "user_url"
        case issueUrl = "issues_url"
    }
}

let request = URLRequest(url: URL(string: "https://api.github.com")!)
let apiResult: Observable<GithubAPIResult> = URLSession.shared
    .rx.data(request: request)
    .map(Data.jsonToModelHandler)
apiResult.subscribe(onNext: { (result) in
    print(result)
}).disposed(by: kDisposeBag)