Dependencies
To begin with only a few phrases about dependencies. From Swift 4 you do not want any dependency to parse JSON knowledge, as a result of there are built-in protocols to care for every part. If you’re nonetheless utilizing some form of Third-party you must positively ditch it for the sake of simplicity. By the best way earlier than you add any exterior dependency into your undertaking, please suppose twice. 🤔
Networking
In case your job is just to load some form of JSON doc by HTTP from across the internet, – shock – you will not want Alamofire in any respect. You should use the built-in URLSession class to make the request, and get again every part that you’re going to want. The Basis networking stack is already a fancy and really helpful stack, do not make issues much more difficult with additional layers.
JSON parsing
Now, after the quick intro, let’s dive in and get some actual faux JSON knowledge from the JSONPlaceholder internet service. I’ll place the entire thing proper right here, you possibly can choose it, copy and paste right into a Swift playground file.
import Basis
import PlaygroundSupport
PlaygroundPage.present.needsIndefiniteExecution = true
struct Put up: Codable {
enum CodingKeys: String, CodingKey {
case id
case title
case physique
case userIdentifier = "userId"
}
let id: Int
let title: String
let physique: String
let userIdentifier: Int
}
let url = URL(string: "https://jsonplaceholder.typicode.com/posts")!
URLSession.shared.dataTask(with: url) { knowledge, response, error in
if let error = error {
print("Error: (error.localizedDescription)")
PlaygroundPage.present.finishExecution()
}
guard
let httpResponse = response as? HTTPURLResponse,
httpResponse.statusCode == 200
else {
print("Error: invalid HTTP response code")
PlaygroundPage.present.finishExecution()
}
guard let knowledge = knowledge else {
print("Error: lacking knowledge")
PlaygroundPage.present.finishExecution()
}
do {
let decoder = JSONDecoder()
let posts = strive decoder.decode([Post].self, from: knowledge)
print(posts.map { $0.title })
PlaygroundPage.present.finishExecution()
}
catch {
print("Error: (error.localizedDescription)")
PlaygroundPage.present.finishExecution()
}
}.resume()
As you possibly can see downloading and parsing JSON from the net is a very easy job. This entire code snippet is round 50 strains of code. In fact it is only a proof of idea, nevertheless it works and you do not want any dependency. It is pure Swift and Basis.
To save some typing, you too can generate the ultimate objects immediately from the JSON construction with these superb Xcode extensions.
The Codable
protocol – which is definitely a compound typealias
from Encodable & Decodable
protocols – makes the method of parsing JSON knowledge in Swift magical. 💫