【发布时间】:2015-05-07 09:53:59
【问题描述】:
我对在 Swift 中处理 JSON 数据非常陌生,而且对 Swift 几乎同样陌生。在 Playground 中,我编写了一大堆解析 JSON 数据的代码。
但是我意识到我不想将此代码复制并粘贴到每个仅使用部分数据的视图控制器中。我想创建一个处理 json 数据的自定义类。
这是我的一些代码:
var status: String!
var message: String!
var code: Int!
var dataArray: [NSDictionary]!
var responseCode: String!
var url: NSURL!
var session: NSURLSession!
url = NSURL(string: "http://thisappgonnabecoool.json")
session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in
if (error != nil) {
// println(error)
} else {
let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
status = jsonResult["status"] as! String
message = jsonResult["message"] as! String
code = jsonResult["code"] as! Int
dataArray = jsonResult["data"] as! [NSDictionary]
}
})
task.resume()
然后我尝试创建一个这样的类:
class JsonClass {
var status: String!
var message: String!
var code: Int!
var dataArray: [NSDictionary]!
var responseCode: String!
var url: NSURL!
var session: NSURLSession!
init() {
url = NSURL(string: "http://thisappgonnabecoool.json")
session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: { data, response, error -> Void in
if (error != nil) {
// println(error)
} else {
let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
status = jsonResult["status"] as! String
message = jsonResult["message"] as! String
code = jsonResult["code"] as! Int
dataArray = jsonResult["data"] as! [NSDictionary]
}
})
task.resume()
}
我认为在新课程中我可以做这样的事情:
let jsonAPI = JsonClass()
println(jsonAPI.status)
println(jsonAPI.message)
等等……
但是,任何访问 JsonClass 实例的尝试都会导致每个 JsonClass 属性的值为 nil。
使用此类的实例访问这些数据的下一步是什么?
【问题讨论】:
-
您应该在此类中创建一个用于开始下载的方法。它应该有一个完成块,您可以在
dataTaskWithURL:completionHandler:方法的完成处理程序中调用它。 -
为什么不使用 SwiftyJSON 和 Alamofire?
-
这听起来确实像解决方案,您能否提供一个示例供参考?它会帮助我,我相信其他人也会受益@rdelmar
-
我没有用 Swift 编写的示例。这里有这个想法的 Objective-C 实现,stackoverflow.com/questions/25669761/…