Listando Amiibos com Swift (Quase sem codificar)
Neste projeto a ideia será consumir uma API simples e pública, de uma maneira rápida e com pouco código.
Vamos conectar pelo Postman, gerar e exportar o código de conexão, com o response vamos mapear para um Objeto que irá nos ajudar no Swift.
No Quicktype colocamos a request e copiamos o código que ele gerou, para mapear os campos.
Por fim no Playground vamos colar ambos código e testar, com uma pequena alteração, para demonstrar como listar os dados da API, e prevenir erros lançando eles no catch.
Links:
Para Mapear o Objeto: https://app.quicktype.io/
Postman: https://www.postman.com/downloads/

https://www.amiiboapi.com/api/amiibo/?name=mario





/*
####### QUICKTYPE CODE #######
*/
// MARK: - Amiibo
class Amiibo: Codable {
let amiibo: [AmiiboElement]?
init(amiibo: [AmiiboElement]?) {
self.amiibo = amiibo
}
}
// MARK: - AmiiboElement
class AmiiboElement: Codable {
let amiiboSeries, character, gameSeries, head: String?
let image: String?
let name: String?
let release: Release?
let tail, type: String?
init(amiiboSeries: String?, character: String?, gameSeries: String?, head: String?, image: String?, name: String?, release: Release?, tail: String?, type: String?) {
self.amiiboSeries = amiiboSeries
self.character = character
self.gameSeries = gameSeries
self.head = head
self.image = image
self.name = name
self.release = release
self.tail = tail
self.type = type
}
}
// MARK: - Release
class Release: Codable {
let au, eu, jp, na: String?
init(au: String?, eu: String?, jp: String?, na: String?) {
self.au = au
self.eu = eu
self.jp = jp
self.na = na
}
}
/*
####### QUICKTYPE CODE #######
*/
do {
let amiiboResponse = try JSONDecoder().decode(Amiibo.self, from: data)
for amiibo in amiiboResponse.amiibo ?? [] {
print("Amiibo \(amiibo.tail ?? "")" , " - " ,amiibo.amiiboSeries ?? "")
}
} catch {
print("*************** Decodable error ***************")
print(error)
print(error.localizedDescription)
print("*************** Decodable error ***************")
}
/*
####### POSTMAN CODE #######
*/
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var semaphore = DispatchSemaphore (value: 0)
var request = URLRequest(url: URL(string: "https://www.amiiboapi.com/api/amiibo/?name=mario")!,timeoutInterval: Double.infinity)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
semaphore.signal()
return
}
//semaphore.signal()
print("*************** RESPONSE ***************")
print(String(data: data, encoding: .utf8)!)
print("*************** RESPONSE ***************")
do {
let amiiboResponse = try JSONDecoder().decode(Amiibo.self, from: data)
for amiibo in amiiboResponse.amiibo ?? [] {
print("Amiibo \(amiibo.tail ?? "")" , " - " ,amiibo.amiiboSeries ?? "")
}
} catch {
print("*************** Decodable error ***************")
print(error)
print(error.localizedDescription)
print("*************** Decodable error ***************")
}
semaphore.signal()
}
task.resume()
semaphore.wait()
/*
####### POSTMAN CODE #######
*/