2015-10-21 43 views
1

我目前正在使用Swift 2.0和Xcode 7.0.1開發我的第一個iOS應用程序。Swift:使用未解析的標識符'json'

我得到一個奇怪的小錯誤,我似乎無法修復:

 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 { 

是否有人可以告訴我,我做錯了什麼嗎?

+1

代碼移到如果讓語句... – dirtydanee

+1

您的JSON不是全局聲明...所以你需要從'如果讓parseJSON = json'移動你的代碼到DO ... CATCH –

+0

此類消息重寫這個正常之後出現? [鏈接](https://drive.google.com/file/d/0B9oZrweCVU4jdUk4UXdBM0lLaDg/view?usp=sharing) –

回答

0

變量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) 
} 
+0

這樣的消息出現後重寫這個正常? [鏈接](https://drive.google.com/file/d/0B9oZrweCVU4jdUk4UXdBM0lLaDg/view?usp=sharing) –

+0

從Swift 1遷移到2是一大步。即使使用自動遷移器,也可能會顯示很多錯誤和警告。對於其中一些編譯器提出的解決方案。其他人閱讀錯誤列表並手動解決問題。一個好方法是通過命令點擊受影響的符號來讀取簽名並將其與當前語法進行比較。 – vadian

+0

謝謝!我正在變得更好。 –

相關問題