【问题标题】:Swift 3 Value of type 'Any?' has no member 'object'“任何?”类型的 Swift 3 值没有成员“对象”
【发布时间】:2023-04-02 15:35:01
【问题描述】:

我更新了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

标签: ios swift swift3


【解决方案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 中使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多