Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]
Posted
技术标签:
【中文标题】Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]【英文标题】:Swift 2 - NSJSONSerialization.JSONObjectWithData Handling Error [duplicate] 【发布时间】:2015-11-13 12:36:55 【问题描述】:我有一个 JSONParser,但不幸的是我无法将 NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error)
位适应 Swift 2.0,所以我收到错误:
Extra argument 'error' in call
我发现我可以使用 do-try-catch 来实现这一点,但我不知道如何在我的情况下调整它。无论我尝试什么都只是抛出另一个错误。
class JSONParser
let json: AnyObject?
var error: NSError?
init(data: NSData) // ~this chunk~
self.json = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &error)
func array()->NSArray?
if let jsonResponse: AnyObject = self.json
return jsonResponse as? NSArray
return nil
func dictionary()->NSDictionary?
if let jsonResponse: AnyObject = self.json
return jsonResponse as? NSDictionary
return nil
【问题讨论】:
【参考方案1】:swift3
NSJSONSerialization
及其方法修改,根据Swift Documents.
do
let JsonDict = try JSONSerialization.jsonObject(with: data, options: [])
// you can now use t with the right type
if let dictFromJSON = JsonDict as? [String:String]
// use dictFromJSON
catch let error as NSError
print(error)
Swift2
init(data: NSData) // ~this chunk~
do
self.json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String:AnyObject]
catch
print("error: \(error)")
self.json = nil
更多信息tutorial1,tutorial2
【讨论】:
当我尝试你的例子时,我收到了Return from initializer without initializing all stored properties
@senty 将self.json = nil
添加到catch
块
@sbarow 解决了我的问题。谢谢!【参考方案2】:
var dataSource = [AnyObject]()
do self.dataSource = try NSJSONSerialization.JSONObjectWithData(responseData, options: NSJSONReadingOptions.MutableLeaves) as! [AnyObject]
catch let error as NSError
print("Failed to load: \(error.localizedDescription)")
if self.dataSource.count != 0
dispatch_async(dispatch_get_main_queue())
self.sampleTableView.reloadData()
【讨论】:
以上是关于Swift 2 - NSJSONSerialization.JSONObjectWithData 处理错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift