如何使用Swift 2 + XCode 7 + iOS 9获取和parsingJSON

正在寻找有用的教程与Swift 2和iOS 9的networking,但似乎主题没有在线内容。 我已经观看了WWDC会话使用NSURLSession进行networking连接但是我无法调整iOS9的新API来获取和parsingJSON数据的asynchronous方式。 我曾经尝试过:

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

请分享你在iOS9和Swift2networking上的经验,任何最佳实践也许是一个Singleton类的networking和parsing可能是一个ORM?

简单的方法来为您提出要求:

如何在Swift中创buildHTTP请求?

或者如果您想要自己发送请求:

HTTP POSTerror handling在Swift 2中

将string转换为JSON对象:

就像一个例子,在这里我转换了一个NSString

首先将NSString转换为NSDictionary

 static func convert(src: NSString) -> NSDictionary { // convert String to NSData let data = src.dataUsingEncoding(NSUTF8StringEncoding) 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 } } 

然后,像这样使用它

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

你可以使用转换后的JSON来创build一个像这样的对象

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

奥哈,以及…searchasynchronousnetworking调用迅速。 你会发现很多东西。

但是啊…创build一个NSMutableRequest,初始化URL,将方法设置为GET或POST。

现在让:

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

这将以asynchronous方式运行,所以您需要考虑处理数据的方法。 起初你的响应数据是在variablesdata这是一种NSData。 你将需要这个来创build你的字典:

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

也许你需要把这个放在警惕之中,或者让我们说出来。

现在,您需要将数据传递给函数调用程序…您可以通过多种方式执行此操作,我更喜欢成功和失败块您可以调用Request函数,并提供成功和失败块。 这块将做最后应该发生的事情:

  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) 

就是这样 在数据,响应,错误的请求块中,您只需执行以下操作:

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