Swift 3’Any’类型的值 没有会员’对象’
我更新了swift 3,发现了很多错误。 这是其中之一:
“任何?”类型的值 没有会员’对象’
这是我的代码:
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() }
新错误更新:
可选链没有效果,表达式已经产生’Any?’
和
无法调用非function类型的值’任何?!’
它在以前的版本7.3.1 swift 2中运行良好。
这是json的回应:
{ "meta":{"status":200,"msg":"OK"}, "response":[""], "total_data":0 }
与Swift 2不同,Swift 3将Objective-C的id
导入为Any?
而不是AnyObject?
(参见本 Swift演化提案)。 要修复错误,需要将所有变量AnyObject
为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() } }
你的responseObject
是Optional
(具体来说是一个Any?
),所以你必须打开它才能调用它的方法或访问它的属性,比如responseObject?.object(forKey: "meta")
等。有几个地方在曾经是非Optional
值的框架现在是Optional
,特别是在没有指定的可空性限定符的情况下在Objective-C中使用它们的框架。