【问题标题】:Swift : Use of unresolved identifier 'json'Swift:使用未解析的标识符“json”
【发布时间】:2015-10-21 07:27:17
【问题描述】:

我目前正在使用 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 {

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 将您的代码移至 if let 语句...
  • 您的 json 未全局声明...所以您需要将代码从 if let parseJSON = json 移动到 do...catch
  • 改写后出现这样的消息正常吗? link
  • 只要按照说明,你就可以整理出那些消息
  • 好的!没有错,谢谢:)

标签: ios swift2


【解决方案1】:

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

【讨论】:

  • 改写后出现这样的消息正常吗? link
  • 从 Swift 1 到 2 的迁移是一个巨大的进步。即使使用自动迁移器,也会显示很多错误和警告。对于其中一些,编译器提出了解决方案。对于其他人,请阅读错误列表并手动解决问题。一个好方法是命令单击受影响的符号以读取签名并将其与当前语法进行比较。
猜你喜欢
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2015-05-13
  • 2016-11-28
  • 2015-05-25
  • 2017-01-28
  • 2015-11-27
  • 1970-01-01
相关资源
最近更新 更多