“任何?”类型的 Swift 3 值没有成员“对象”
Posted
技术标签:
【中文标题】“任何?”类型的 Swift 3 值没有成员“对象”【英文标题】:Swift 3 Value of type 'Any?' has no member 'object' 【发布时间】:2016-09-15 02:57:56 【问题描述】:我更新了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?'
和
不能调用非函数类型'Any?!'的值
在以前的版本 7.3.1 swift 2 中运行良好。
这是 json 响应:
"meta":"status":200,"msg":"OK",
"response":[""],
"total_data":0
【问题讨论】:
请向我们展示您的 json 响应? 查看更新的问题@NiravD 我已经告诉过您向我们展示您的 json 响应,以便我们可以在此基础上创建字典。jsonmanager
是什么类型?
@kabiroberai AFHTTPRequestOperationManager
【参考方案1】:
与 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()
【讨论】:
更改后,我收到第一个错误:“任何?”类型的值没有成员“对象” @stevengbu 你能告诉我你更新的代码吗?确保您访问的是response
而不是 responseObject
@stevengbu 我刚刚编辑了我的答案,您可能想尝试使用新代码
@stevengbu 没关系,我发现了这个问题(并再次更新了答案)。再试一次。【参考方案2】:
您的responseObject
是Optional
(特别是Any?
),因此您必须打开它才能调用它的方法或访问它的属性,例如responseObject?.object(forKey: "meta")
等。以前非@987654325@ 的值现在是Optional
的框架,尤其是在没有指定可空性限定符的情况下在Objective-C 中使用它们。
【讨论】:
以上是关于“任何?”类型的 Swift 3 值没有成员“对象”的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3“任何”类型的值没有成员“valueForKey”
Swift 3 - 'Any?' 类型的值没有成员“valueForKey”
Swift 3.0:“IndexSet”类型的值没有成员“enumerateIndexesUsingBlock”
Swift 3 / 如何处理嵌套的 NSDictionaries,因为“Any 类型的值没有成员值”
“GKEntity”类型的值没有成员“componentForClass”。为啥我在 swift 3.0 中找不到这种方法?