CodableAlamofire
                                
                                 CodableAlamofire copied to clipboard
                                
                                    CodableAlamofire copied to clipboard
                            
                            
                            
                        An extension for Alamofire that converts JSON data into Decodable objects.
   
Swift 4 introduces a new Codable protocol that lets you serialize and deserialize custom data types without writing any special code and without having to worry about losing your value types. 🎉
Awesome, isn't it? And this library helps you write less code! It's an extension for Alamofire that converts JSON data into Decodable object.
Useful Resources:
- Encoding and Decoding Custom Types - Article by Apple
- Using JSON with Custom Types - Swift Playground
- Also there is a special session from WWDC2017that covers this new feature - What's New in Foundation
Usage
Let's decode a simple json file:
{
    "result": {
        "libraries": [
            {
                "name": "Alamofire",
                "stars": 23857,
                "url": "https://github.com/Alamofire/Alamofire",
                "random_date_commit": 1489276800
            },
            {
                "name": "RxSwift",
                "stars": 9600,
                "url": "https://github.com/ReactiveX/RxSwift",
                "random_date_commit": 1494547200
            }	
        ]
    }
}
with the following Swift model:
private struct Repo: Decodable {
    let name: String
    let stars: Int
    let url: URL
    let randomDateCommit: Date
    
    private enum CodingKeys: String, CodingKey {
        case name
        case stars
        case url
        case randomDateCommit = "random_date_commit"
    }
}
There is a similar method to responseData, responseJSON - responseDecodableObject:
func responseDecodableObject<T: Decodable>(queue: DispatchQueue? = nil, keyPath: String? = nil, decoder: JSONDecoder = JSONDecoder(), completionHandler: @escaping (AFDataResponse<T>) -> Void)
- queue- The queue on which the completion handler is dispatched.
- keyPath- The keyPath where object decoding should be performed.
- decoder- The decoder that performs the decoding of JSON into semantic- Decodabletype.
let url = URL(string: "https://raw.githubusercontent.com/otbivnoe/CodableAlamofire/master/keypathArray.json")!
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .secondsSince1970 // It is necessary for correct decoding. Timestamp -> Date.
AF.request(url).responseDecodableObject(keyPath: "result.libraries", decoder: decoder) { (response: AFDataResponse<[Repo]>) in
    let repo = response.value
    print(repo)
}
Note:
- For array: DataResponse<[Repo]>
- For single object: DataResponse<Repo>
Requirements
- Swift 4+
- Xcode 9+
Installation 🔥
CocoaPods
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has over eighteen thousand libraries and can help you scale your projects elegantly. You can install it with the following command:
$ sudo gem install cocoapods
To integrate CodableAlamofire, simply add the following line to your Podfile:
target 'Test' do
  use_frameworks!
  pod 'CodableAlamofire'
  
end
Carthage
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
To integrate CodableAlamofire into your Xcode project using Carthage, specify it in your Cartfile:
github "Otbivnoe/CodableAlamofire"
Run carthage update to build the framework and drag the built CodableAlamofire.framework into your Xcode project.