如何使用Swift 2 + XCode 7 + iOS 9获取和解析JSON

iOS*_*eek -1 json ios nsurlsession swift2

正在寻找与Swift 2和iOS 9联网的有用教程,但似乎该主题没有在线内容.我已经看过WWDC会话网络与NSURLSession但我无法调整iOS9的新API以获取和解析JSON数据的异步方式.我尝试过的:

    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)
    }
Run Code Online (Sandbox Code Playgroud)

请分享您在iOS9和Swift2上的网络体验,任何最佳实践可能是Singleton类的网络和解析可能是一个ORM?

Sin*_* KH 9

轻松地向您提出要求:

如何在Swift中发出HTTP请求?

或者如果您想通过自己的方式发送请求:

Swift 2中的HTTP POST错误处理

将字符串转换为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
    }

}
Run Code Online (Sandbox Code Playgroud)

然后,像这样使用它

if  let name = dictionary["name"] as? String {
    self.name = name
}
Run Code Online (Sandbox Code Playgroud)

您可以使用转换后的JSON来创建这样的对象

import Foundation

class Student {
var name="";

init(dictionary: NSDictionary) {
    let _NAME = "name"
    if  let name = dictionary[_NAME] as? String {
        self.name = name
    }
}

}
Run Code Online (Sandbox Code Playgroud)

  • 为什么PO应该使用第三方库来完成简单的数据任务? (2认同)