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_optional2.swift

从 Swift 3.0 转换为 Swift 2.3

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

将版本更改为 Swift 1.2 而不是 Swift 2.1

将 swift 2.3 转换为 swift 3 错误

迁移到惯用的 Swift 2 的清单(又名 Swift 2 转换指南在哪里)?