J'utilise la version la plus récente de Xcode (8.1 au moment de l'écriture), qui utilise Swift 3.0.
Tout ce que j'essaie de faire est de prendre une chaîne, de la convertir en une URL et de tester cette URL pour voir si elle me donne une erreur 404. J'ai pu créer une URL et une URLRequest en utilisant:
let url = URL(string: fullURL)
let request = URLRequest(url: url!)
mais je me suis retrouvé incapable de faire fonctionner quoi que ce soit au-delà. J'ai cherché de l'aide, mais la plupart, sinon la totalité, est écrite en Swift 2.0, que j'ai essayé de convertir en vain. Il semble que même si vous modifiez la convention de dénomination pour supprimer le préfixe NS, cela ne suffit pas. J'ai essayé d'utiliser:
let response: AutoreleasingUnsafeMutablePointer<URLRequest> = nil
mais cela me donne une erreur que "solutionner-le" aggrave en collant des points d'interrogation et des points-virgules partout.
La documentation d'Apple ne m'aide pas beaucoup non plus. Je suis sérieusement perdue.
Quelqu'un sait-il comment configurer et tester correctement une URL pour le statut 404 dans Swift 3.0?
essayez ceci pour vous donner les codes de statut des réponses - 200, 404 etc.:
let url = URL(string: fullURL)
let task = URLSession.shared.dataTask(with: url!) { _, response, _ in
if let httpResponse = response as? HTTPURLResponse {
print(httpResponse.statusCode)
}
}
task.resume()
Vous pouvez également faire la même chose, en remplaçant simplement le with: url!
pour utiliser la variable request
telle que définie dans votre exemple, par exemple. let task = URLSession.shared.dataTask(with: request) {...}
Mais dans cet exemple, je ne pense pas que vous deviez vraiment.
Exemple simple:
let url = // whatever
let session = URLSession.shared
let task = session.downloadTask(with:url) { loc, resp, err in
let status = (resp as! HTTPURLResponse).statusCode
print("response status: \(status)")
}
task.resume()
Voici un autre exemple de la méthode delegate
public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didBecome downloadTask: URLSessionDownloadTask){
let responseStatusCode = (dataTask.response as! HTTPURLResponse).statusCode
}
Voici l'exemple https://github.com/ankitthakur/SwiftNetwork/blob/master/Sources/Shared/SwiftNetwork.Swift