Swift:使用未解析的标识符’json’

我目前正在使用Swift 2.0和Xcode 7.0.1开发我的第一个iOS应用程序。

我得到一个奇怪的小错误,我似乎无法修复:

var err: NSError? 

原始代码:

  //var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers, error: &err) as? NSDictionary 

Swift2重写代码:

  do { if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary { print(json) } } catch { print(error) } 

在重写之前使用未解析的标识符’json’

  if let parseJSON = json { var resultValue = parseJSON["status"] as? String print("result: \(resultValue)") var isUserRegistered:Bool = false; if(resultValue=="Success") { isUserRegistered = true; } var messageToDisplay:String = parseJSON["message"] as! String!; if(!isUserRegistered) { messageToDisplay = parseJSON["message"] as! String!; } dispatch_async(dispatch_get_main_queue(),{ //Display alert message with confirmation. var myAlert = UIAlertController(title:"Alert", message:messageToDisplay, preferredStyle: UIAlertControllerStyle.Alert); let okAction = UIAlertAction(title:"Ok", style:UIAlertActionStyle.Default){ action in self.dismissViewControllerAnimated(true, completion: nil); } myAlert.addAction(okAction); self.presentViewController(myAlert, animated:true, completion:nil); }); } 

此行引发错误:

  if let parseJSON = json { 

有人可以告诉我这里我做错了什么吗?

变量json仅在do块的范围内可见。

将代码移动到do块。
也不需要可选的绑定。 如果代码传递了try语句,则parseJSON有效且不可选。

 do { let parseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as! NSDictionary { print(parseJSON) var resultValue = parseJSON["status"] as? String print("result: \(resultValue)") var isUserRegistered:Bool = false; if(resultValue=="Success") { isUserRegistered = true; } var messageToDisplay:String = parseJSON["message"] as! String!; if(!isUserRegistered) { messageToDisplay = parseJSON["message"] as! String!; } dispatch_async(dispatch_get_main_queue(),{ //Display alert message with confirmation. var myAlert = UIAlertController(title:"Alert", message:messageToDisplay, preferredStyle: UIAlertControllerStyle.Alert); let okAction = UIAlertAction(title:"Ok", style:UIAlertActionStyle.Default){ action in self.dismissViewControllerAnimated(true, completion: nil); } myAlert.addAction(okAction); self.presentViewController(myAlert, animated:true, completion:nil); }); } catch let error as NSError { print(error) }