Je tente de créer une fonction de mise en réseau générique Je cherche à créer un gestionnaire d'API qui téléchargera JSON à partir du réseau et convertira le thème en structures Swift conformes au protocole Decodable
. Actuellement, je suis en utilisant les types explicites:Appel de réseau avec le type de décodage générique
struct MyObject : Decodable {
let id : Int
let name : String
}
static fileprivate func makeNetworkRequest(url: URL, completionHandler: @escaping(_ error: Error?, _ myObject: MyObject?) ->()) {
URLSession.shared.dataTask(with: url) { (data, response, error) in
// handle error
do {
let myNewObject = try JSONDecoder().decode(MyObject.self, from: data!)
completionHandler(nil, myNewObject)
}
catch let error {
completionHandler(error, nil)
return
}
}.resume()
}
J'espère créer une fonction générique où je peux spécifier un type de données qui confirme Decodable
et ont l'objet de données renvoyées dans le gestionnaire d'achèvement. Quelque chose du genre:
static fileprivate func makeNetworkRequest<T>(url: URL, type: <<<Decodable Type>>>, completionHandler: @escaping(_ error: Error?, _ myObject: <<<Deocable Object>>>?) ->()) {
URLSession.shared.dataTask(with: url) { (data, response, error) in
// handle error
do {
let myNewObject = try JSONDecoder().decode(<<<Decodable Type>>>.self, from: data!)
completionHandler(nil, myNewObject)
}
catch let error {
completionHandler(error, nil)
return
}
}.resume()
}
Cependant, je n'arrive pas à obtenir les paramètres de fonction corrects. Je n'ai pas beaucoup d'expérience de travail avec les génériques. Toute aide serait appréciée
swer! Travaillé comme un charme –