Alamofire的扩展用来转换json成对象 - CodableAlamofire

2017-06-10      465      Swift

Swift 4 introduces a newCodableprotocol 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 forAlamofirethat convertsJSONdata intoDecodableobject.

Useful Resources:


Let's decode a simple json file:

    "result": {
        "libraries": [
                "name": "Alamofire",
                "stars": 23857,
                "url": "",
                "random_date_commit": 1489276800
                "name": "RxSwift",
                "stars": 9600,
                "url": "",
                "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 toresponseData,responseJSON- responseDecodableObject :

func responseDecodableObject<T: Decodable>(queue: DispatchQueue? = nil, keyPath: String? = nil, decoder: JSONDecoder = JSONDecoder(), completionHandler: @escaping (DataResponse<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 semanticDecodabletype.
let url = URL(string: "")!
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .secondsSince1970 // It is necessary for correct decoding. Timestamp -> Date.

Alamofire.request(url).responseDecodableObject(keyPath: "result.libraries", decoder: decoder) { (response: DataResponse<[Repo]>) in
    let repo = response.result.value


  • For array:DataResponse<[Repo]>
  • For single object:DataResponse<Repo>


  • Swift 4+
  • Xcode 9+



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

Because ofAlamofiresupports Swift 3 at the moment and we can't point out the branch of dependency in.podspecfile. Whe have to overrride the current pod:

# TODO: Remove this after all pods are converted to swift 4
def swift4_overrides
    pod 'Alamofire', git: '', branch: 'swift4'

target 'Test' do

  pod 'CodableAlamofire', :git => ''


NOTE: Don't forget to set the correct Command Line Tools: Xcode > Preferences > Locations > Command Line Tools > Xcode 9.0.

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 yourCartfile:

github "Otbivnoe/CodableAlamofire"

Runcarthage updateto build the framework and drag the builtCodableAlamofire.frameworkinto your Xcode project.