Transformers is a framework to transform things elegantly using the power of Swift programming language.
Note: Support Swift version: 4.1 or newer
- 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.
Download the project, and drag the Core
folder to your project.
Add this to Cartfile
github "webfrogs/Transformers" ~> 1.0
dependencies: [
.package(url: "https://github.com/webfrogs/Transformers.git", .upToNextMinor(from: "1.0.0")),
]
The most common scene in iOS programming is handle JSON data.
let jsonString = """
{"key1": "value2"}
"""
let value1: String? = jsonString.data(using: String.Encoding.utf8)
.flatMap({$0.toDictionary()})
.flatMap({$0.value(key: "key1")})
print(value1 ?? "")
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)