418 votes

Comment faire une requête HTTP dans Swift?

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

620voto

Cezar Points 6222

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.

15voto

AlexanderN Points 5805

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)")
    })
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X