如何使用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)