Comment chercher et parsingr JSON en utilisant Swift 2 + XCode 7 + iOS 9

Était à la search de tutoriels utiles pour la mise en réseau avec Swift 2 et iOS 9, mais il semble que ce sujet n'a pas de contenu en ligne. J'ai regardé la session WWDC Networking with NSURLSession Mais je n'ai pas pu adapter la nouvelle API d'iOS9 pour avoir un moyen asynchronous de récupérer et d'parsingr datatables JSON. Ce que j'ai essayé:

do { if let url = NSURL(ssortingng: "site/api.php?option=fetchOps"), let data = NSData(contentsOfURL: url), let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [[Ssortingng:AnyObject]] { } } catch let error as NSError { print(error.description) } 

S'il vous plaît partager votre expérience avec le networking sur iOS9 et Swift2, toutes les meilleures pratiques peut-être un cours Singleton pour le networking et l'parsing peut-être un ORM?

Un moyen facile de faire une request pour vous:

Comment faire une requête HTTP dans Swift?

Ou si vous voulez envoyer une request par vos propres moyens:

Erreur HTTP POST Traitement dans Swift 2

Conversion d'une string en object JSON:

Juste à titre d'exemple, ici, j'ai converti un NSSsortingng

Tout d'abord convertir le NSSsortingng en NSDictionary

 static func convert(src: NSSsortingng) -> NSDictionary { // convert Ssortingng to NSData let data = src.dataUsingEncoding(NSUTF8SsortingngEncoding) var error: NSError? // convert NSData to 'AnyObject' let anyObj: AnyObject? do { anyObj = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions(rawValue: 0)) } catch let error1 as NSError { error = error1 anyObj = nil } if(error != nil) { // If there is an error parsing JSON, print it to the console print("JSON Error \(error!.localizedDescription)") //self.showError() return NSDictionary() } else { return anyObj as! NSDictionary } } 

Et puis, utilisez-le comme ça

 if let name = dictionary["name"] as? Ssortingng { self.name = name } 

Vous pouvez utiliser le JSON converti pour créer un object comme celui-ci

 import Foundation class Student { var name=""; init(dictionary: NSDictionary) { let _NAME = "name" if let name = dictionary[_NAME] as? Ssortingng { self.name = name } } } 

oha, eh bien … searchr des appels réseau async pour swift. Vous findez beaucoup de choses.

Mais oui … Créez un NSMutableRequest, init eith l'URL, définissez la méthode à GET ou POST.

Maintenant faites:

 let task = NSURLSession.sharedSession().dataTaskWithRequest(yourMutableRequest) { data, response, error in // do your stuff here } task.resume() 

Cela fonctionnera de manière asynchronous, vous devez donc réfléchir à un moyen de gérer datatables. Au début vos données de réponse sont dans les data variables c'est un type de NSData. Vous en aurez besoin pour créer votre dictionary:

 let dictionaryOrArray = NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers, error: nil) 

Peut-être que vous devez mettre cela dans une garde ou si laisser statemant.

Maintenant, vous devez transmettre datatables à l'appelant de la fonction … vous pouvez le faire de plusieurs façons, je préfère les blocs de succès et d'échec Vous appelez votre fonction de request et vous fournissez un bloc succès et échec. Ces blocs feront ce qui devrait arriver à la fin:

  let successBlock:[AnyObject]->Void = { response in // handle your dict } let failureBlock:NSError->Void = { error in // error handling } YourClass.fetchSomething(someURL, parameters: params, requestMethod: method, success : successBlock, failure: failureBlock) 

Quelque chose comme ca. Dans votre bloc de requête avec données, réponse, erreur, procédez comme suit:

 If error { failure(error) return } success(dictionaryOrArray)