This question already has answers here:
Correct handling of NSJSONSerialization (try catch) in Swift (2.0)?

(3个答案)


4年前关闭。




我有一个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
  }
}

最佳答案

swift3
根据Swift Documents修改了NSJSONSerialization及其方法。

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
     }
  }
有关更多信息tutorial1tutorial2

10-08 07:44