不要
AnyObject为已解码对象声明类型,因为您希望它是an,
NSDictionary并且您正在执行转换来做到这一点。
另外,最好将零选项用于NSJSONSerialization而不是随机选项。
在我的示例中,我还使用了一个自定义错误类型来进行演示。
请注意,如果您使用的是自定义错误类型,则还必须包括泛型,
catch以使其详尽无遗(在本示例中,将简单向下转换为NSError)。
enum JSONError: String, ErrorType { case NoData = "ERROR: no data" case ConversionFailed = "ERROR: conversion from JSON failed"}func jsonParser() { let urlPath = "http://headers.jsontest.com/" guard let endpoint = NSURL(string: urlPath) else { print("Error creating endpoint") return } let request = NSMutableURLRequest(URL:endpoint) NSURLSession.sharedSession().dataTaskWithRequest(request) { (data, response, error) in do { guard let data = data else { throw JSONError.NoData } guard let json = try NSJSONSerialization.JSonObjectWithData(data, options: []) as? NSDictionary else { throw JSONError.ConversionFailed } print(json) } catch let error as JSonError { print(error.rawValue) } catch let error as NSError { print(error.debugDescription) } }.resume()}与Swift 3.0.2相同:
enum JSONError: String, Error { case NoData = "ERROR: no data" case ConversionFailed = "ERROR: conversion from JSON failed"}func jsonParser() { let urlPath = "http://headers.jsontest.com/" guard let endpoint = URL(string: urlPath) else { print("Error creating endpoint") return } URLSession.shared.dataTask(with: endpoint) { (data, response, error) in do { guard let data = data else { throw JSONError.NoData } guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary else { throw JSONError.ConversionFailed } print(json) } catch let error as JSonError { print(error.rawValue) } catch let error as NSError { print(error.debugDescription) } }.resume()}


