“任何?”类型的 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】:

您的responseObjectOptional(特别是Any?),因此您必须打开它才能调用它的方法或访问它的属性,例如responseObject?.object(forKey: "meta") 等。以前非@​​987654325@ 的值现在是Optional 的框架,尤其是在没有指定可空性限定符的情况下在Objective-C 中使用它们。

【讨论】:

以上是关于“任何?”类型的 Swift 3 值没有成员“对象”的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3“任何”类型的值没有成员“valueForKey”

Swift 3 - 'Any?' 类型的值没有成员“valueForKey”

Swift 中的“类型‘值’没有下标成员”错误

Swift 3.0:“IndexSet”类型的值没有成员“enumerateIndexesUsingBlock”

Swift 3 / 如何处理嵌套的 NSDictionaries,因为“Any 类型的值没有成员值”

“GKEntity”类型的值没有成员“componentForClass”。为啥我在 swift 3.0 中找不到这种方法?