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) }