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

Posted

技术标签:

【中文标题】Swift:使用未解析的标识符“json”【英文标题】:Swift : Use of unresolved identifier '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 只要按照说明,你就可以整理出那些消息 好的!没有错,谢谢:) 【参考方案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 的迁移是一个巨大的进步。即使使用自动迁移器,也会显示很多错误和警告。对于其中一些,编译器提出了解决方案。对于其他人,请阅读错误列表并手动解决问题。一个好方法是命令单击受影响的符号以读取签名并将其与当前语法进行比较。

以上是关于Swift:使用未解析的标识符“json”的主要内容,如果未能解决你的问题,请参考以下文章

使用未声明的类型“JSON”和使用未解析的标识符“JSONEncoding”

使用 SwiftyJSON 的未解析标识符 JSON

Swift:使用未解析的标识符“addChild”

在 Swift 中使用未解析的标识符“参数”

iOS [Swift]:解析 Facebook 登录“使用未解析的标识符‘权限’”

使用未解析的标识符“Singleton”Swift 3