如何使用Swift 2+获取和解析JSON;XCode 7+;iOS 9
我们正在寻找有关Swift 2和iOS 9联网的有用教程,但该主题似乎没有在线内容。我已经观看了WWDC会话,但我无法调整iOS9的新API,使其具有获取和解析JSON数据的异步方式。我所尝试的:如何使用Swift 2+获取和解析JSON;XCode 7+;iOS 9,ios,json,swift2,nsurlsession,Ios,Json,Swift2,Nsurlsession,我们正在寻找有关Swift 2和iOS 9联网的有用教程,但该主题似乎没有在线内容。我已经观看了WWDC会话,但我无法调整iOS9的新API,使其具有获取和解析JSON数据的异步方式。我所尝试的: do { if let url = NSURL(string: "site/api.php?option=fetchOps"), let data = NSData(contentsOfURL: url), let jsonRes
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和Swift2上联网的经验,任何最佳做法可能是用于联网和解析的单例类,也可能是ORM?为您提出请求的简单方法:
或者,如果您希望自己发送请求:
将字符串转换为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
}
import Foundation
class Student {
var name="";
init(dictionary: NSDictionary) {
let _NAME = "name"
if let name = dictionary[_NAME] as? String {
self.name = name
}
}
}
您可以使用转换后的JSON生成如下对象
if let name = dictionary["name"] as? String {
self.name = name
}
import Foundation
class Student {
var name="";
init(dictionary: NSDictionary) {
let _NAME = "name"
if let name = dictionary[_NAME] as? String {
self.name = name
}
}
}
哦,嗯。。。搜索swift的异步网络调用。你会发现很多东西 但是是的。。。创建一个NSMutableRequest,初始化URL,将方法设置为GET或POST 现在作出:
let task = NSURLSession.sharedSession().dataTaskWithRequest(yourMutableRequest) {
data, response, error in
// do your stuff here
}
task.resume()
这将运行异步,因此您需要考虑一种处理数据的方法。首先,您的响应数据位于变量data
中,这是一种NSData。创建词典时,您将需要:
let dictionaryOrArray = NSJSONSerialization.JSONObjectWithData(data, options:.MutableContainers, error: nil)
也许你需要把它放在一个守卫里,或者让他来
现在您需要将数据传递给函数调用方。。。你可以在很多方面做到这一点,我更喜欢成功和失败
调用请求函数并提供成功和失败块。这个模块将完成最终应该发生的事情:
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)
1.您的URL无效。2.您正在同步获取它。改用NSURLSession。在SO或其他网站上有大量的Q&A。解决方案在哪里[要在swift2.0中使用NSURLSession解析JSON)异步?是的。@Eric。如果我想以块回调的形式获得结果,该怎么办?如何更改重复建议中所述的解决方案PO为什么要使用第三方库来完成简单的数据任务?如果你想自己完成,请参见以下内容::编辑了我的答案。