2016-09-15 57 views
4

我更新了swift 3,并且发现了很多错误。这是其中之一:Swift 3类型'Any?'的值?没有会员'object'

类型'Any?'的值没有成员 '对象'

这是我的代码:

jsonmanager.post("http://myapi.com", 
         parameters: nil, 
         success: { (operation: AFHTTPRequestOperation?,responseObject: Any?) in 
         if(((responseObject? as AnyObject).object(forKey: "meta") as AnyObject).object(forKey: "status")?.intValue == 200 && responseObject?.object(forKey: "total_data")?.intValue > 0){ 
          let aa: Any? = (responseObject? as AnyObject).object(forKey: "response") 

          self.data = (aa as AnyObject).mutableCopy() 
         } 

新的错误更新:

可选链没有任何影响,表现已经产生了 '否?'

而且

不能调用非功能型的价值“任何?”

它运作良好,在以前的版本7.3.1迅速2.

这是JSON响应:

{ 
"meta":{"status":200,"msg":"OK"}, 
     "response":[""], 
     "total_data":0 
} 
+0

请向我们展示您的json响应? –

+0

查看更新的问题@NiravD – stevengbu

+0

我已经告诉过你给我们展示你的json响应,以便我们可以在此基础上创建字典。 –

回答

15

与Swift 2不同,Swift 3导入Objective-C的id作为Any?而不是AnyObject?(请参见this Swift演进建议)。要解决您的错误,您需要将所有变量转换为AnyObject。这可能看起来像下面这样:

jsonmanager.post("http://myapi.com", parameters: nil) { (operation: AFHTTPRequestOperation?, responseObject: Any?) in 
    let response = responseObject as AnyObject? 
    let meta = response?.object(forKey: "meta") as AnyObject? 
    let status = meta?.object(forKey: "status") as AnyObject? 
    let totalData = response?.object(forKey: "total_data") as AnyObject? 
    if status?.intValue == 200 && totalData?.intValue != 0 { 
     let aa = response?.object(forKey: "response") as AnyObject? 
     self.data = aa?.mutableCopy() 
    } 
} 
+0

我改变后,我得到了第一个错误:值的类型'任何?没有会员'object' – stevengbu

+0

@stevengbu你能告诉我你的更新代码吗?确保你正在访问'response'而不是'responseObject' – kabiroberai

+0

@stevengbu我刚刚编辑了我的答案,你可能想尝试一下新代码 – kabiroberai

0

responseObjectOptional(具体地说,Any?),所以你必须解开它为了调用它的方法或访问它的属性,如responseObject?.object(forKey: "meta")等。在框架中有几个地方的值曾经是非Optional现在Optional,特别是在Obje中使用它们的地方没有指定可空性限定符的ctive-C。

+0

看到更新的问题,谢谢 – stevengbu

相关问题