J'ai lu le livre Le langage de programmation Swift par Apple dans iBooks, mais je ne peux pas trouver comment je peux faire une demande http (quelque chose comme CURL) dans swift. Dois-je importer des classes obj-c ou dois-je simplement importer des bibliothèques par défaut? Ou est-ce que je ne peux PAS faire une requête HTTP basée sur le code swift natif? Apprécier pour répondre
Réponses
Trop de publicités?Vous pouvez utiliser NSURL
, NSURLRequest
et NSURLSession
ou NSURLConnection
que vous auriez normalement faire en Objective-C. Notez que pour iOS 7.0 et versions ultérieures, NSURLSession
est préféré.
À l'aide de NSURLSession
Initialiser un NSURL
objet et un NSURLSessionDataTask
de NSURLSession
. Puis exécuter la tâche avec resume()
.
let url = NSURL(string: "http://www.stackoverflow.com")
let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
task.resume()
À l'aide de NSURLConnection
Tout d'abord, initialisez un NSURL
et NSURLRequest
:
let url = NSURL(string: "http://www.stackoverflow.com")
let request = NSURLRequest(URL: url)
Ensuite, vous pouvez charger la requête asynchrone avec:
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {(response, data, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
}
Ou vous pouvez initialiser un NSURLConnection
:
let connection = NSURLConnection(request: request, delegate:nil, startImmediately: true)
Assurez-vous de définir votre délégué à autre chose qu' nil
et de vérifier le délégué aux méthodes de travail avec la réponse et les données reçues.
Pour plus de détails, consultez la documentation de l' NSURLConnectionDataDelegate
protocole
Des essais sur un Xcode aire de jeux
Si vous voulez essayer ce code sur une Xcode aire de jeux, ajouter import XCPlayground
de votre aire de jeux, ainsi que l'appel suivant:
XCPSetExecutionShouldContinueIndefinitely()
Cela vous permettra d'utiliser le code asynchrone dans les aires de jeux.
J'utilise l'emballage de ce gars avec de bons résultats jusqu'à présent https://github.com/daltoniam/swiftHTTP . Pas de grandes abstractions qui fuient jusqu'ici
Exemple
var request = HTTPTask()
request.GET("http://vluxe.io", parameters: nil, success: {(response: HTTPResponse) in
if response.responseObject != nil {
let data = response.responseObject as NSData
let str = NSString(data: data, encoding: NSUTF8StringEncoding)
println("response: \(str)") //prints the HTML of the page
}
},failure: {(error: NSError) in
println("error: \(error)")
})