Je suis assez nouveau sur Swift et j'essaie de faire une requête HTTP. J'ai essayé beaucoup d'idées dans cette question de débordement de pile , mais toutes ont causé des erreurs lors de l'exécution dans une aire de jeux; Je pense que c'est parce qu'ils sont tous en Swift 1.0-2.0.
Comment puis-je faire une requête HTTP dans Swift 3?
Mise à jour J'ai essayé la première solution présentée dans cette réponse et, après avoir terminé le "Fix-its" suggéré par Xcode, j'ai rencontré quatre erreurs :
Il y a quelques problèmes avec votre code:
Info.plist
De votre application pour vous connecter aux sites HTTP.dataTask(urlwith: ! as URL)
. Qu'essayez-vous de déballer avec le point d'exclamation (!
)? Quel est le nom de la variable?Beaucoup de noms de classe ont changé entre Swift 2 et 3, donc les réponses que vous avez trouvées peuvent ne pas être applicables. Ci-dessous, un exemple qui se connecte à httpbin.org pour obtenir votre adresse IP:
import PlaygroundSupport
import Foundation
let url = URL(string: "https://httpbin.org/ip")
let task = URLSession.shared.dataTask(with: url!) { data, response, error in
guard error == nil else {
print(error!)
return
}
guard let data = data else {
print("Data is empty")
return
}
let json = try! JSONSerialization.jsonObject(with: data, options: [])
print(json)
}
task.resume()
PlaygroundPage.current.needsIndefiniteExecution = true
Il y a des erreurs de frappe (pas de variable URL dans l'appel) dans votre code.
Quoi qu'il en soit, dans Swift 3, il est préférable d'utiliser la nouvelle structure d'URL et la classe URLSession.
De plus, XCPlayground est maintenant PlaygroundSupport.
Et pas besoin d'utiliser NSString lorsque String est disponible.
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let url = URL(string: "http://stackoverflow.com/")
let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
if let data = data,
html = String(data: data, encoding: String.Encoding.utf8) {
print(html)
}
}
task.resume()
Remarque: ceci concerne Xcode 8 beta 2. Sur la beta 1, vous devrez faire shared()
au lieu de shared
. Si vous êtes sur iOS, n'oubliez pas de import UIKit
, Mais ce code fonctionne également pour OS X si vous import Cocoa
À la place.
Dans votre erreur, il semble que l'URL soit manquante. Voici un simple appel API pour vous aider à démarrer.
import UIKit
import Foundation
import PlaygroundSupport
let url:URL = URL(string: "http://jsonplaceholder.typicode.com/posts")!
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
let paramString = "data=Hello"
request.httpBody = paramString.data(using: String.Encoding.utf8)
let task = session.dataTask(with: request as URLRequest) {
(
data, response, error) in
guard let data = data, let _:URLResponse = response where error == nil else {
print("error")
return
}
let dataString = String(data: data, encoding: String.Encoding.utf8)
print(dataString)
}
task.resume()
PlaygroundPage.current.needsIndefiniteExecution = true