Otbivnoe / CodableAlamofire
- среда, 14 июня 2017 г. в 03:12:10
Swift
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.
WWDC2017
that covers this new feature - What's New in FoundationLet'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 (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 semantic Decodable
type.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.
Alamofire.request(url).responseDecodableObject(keyPath: "result.libraries", decoder: decoder) { (response: DataResponse<[Repo]>) in
let repo = response.result.value
print(repo)
}
DataResponse<[Repo]>
DataResponse<Repo>
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 of Alamofire
supports Swift 3 at the moment and we can't point out the branch of dependency in .podspec
file.
Whe have to overrride the current pod:
# TODO: Remove this after all pods are converted to swift 4
def swift4_overrides
pod 'Alamofire', git: 'https://github.com/Alamofire/Alamofire.git', branch: 'swift4'
end
target 'Test' do
use_frameworks!
swift4_overrides
pod 'CodableAlamofire', :git => 'https://github.com/Otbivnoe/CodableAlamofire.git'
end
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 your Cartfile
:
github "Otbivnoe/CodableAlamofire"
Run carthage update
to build the framework and drag the built CodableAlamofire.framework
into your Xcode project.