如何在Swift 5和Alamofire 5 beta版本中获取并保存响应?

7

我尝试了一些代码,但问题仍未解决。请帮助我,我是Swift编码的新手。

let parameters: Parameters = ["skey": "XXXXXX","country_code":"91","mobile":"XXX004","user_role":"4"]


 AF.request("http://XXXXX/dev/clinic/api/v1/login_otp?", method: .get, parameters: parameters)
    .responseJSON { (response) in
        switch response.result {
        case .success:
            if let JSON = response.result.value as? [String: Any] {
                let status = JSON["status"] as! String
                print(status)
            }
        case .failure(let error): break
            // error handling
        }
}

以下是服务器响应。
 success({
      message = "Otp sent successfully on +9170XXXX1004";
      status = 1;
})

你有什么问题吗?请更详细地解释一下。 - Wings
可能是Xcode:Alamofire获取字符串响应的重复问题。 - Joakim Danielson
你遇到了什么问题? - Anbu.Karthik
我无法打印状态。 - Siva Sankar
如果让JSON = response.result.value as? [String: Any],我会收到错误消息“类型'Result<Any, Error>'没有成员'value'”。 - Siva Sankar
显示剩余5条评论
3个回答

20

对于Alamo 5,您需要使用:

response.value

这是修复了的内容;在 AlamoFire 5 中,将 response.result.value 更改为此值。 - vikzilla
谢谢...我已经寻找解决方案很久了..这太简单和快速了! - marika.daboja

16

请尝试以下代码:

         switch response.result {
                case .success(let value):
                    if let JSON = value as? [String: Any] {
                        let status = JSON["status"] as! String
                        print(status)
                    }
                case .failure(let error): break
                    // error handling
                }


@SivaSankar 对不起,请再检查一下代码,我已经修复了 =)let JSON = value as? [String: Any] - Vladlex

0

类型“Result”没有成员“value”的错误是由于Alamofire 5版本引起的,在4.8.2版本中,“Result”是类型“”的结果。

如果您是通过pod安装了Alamofire,则应该获取4.8.2版本,其中您的代码可以正常工作。

Alamofire.request("https://jsonplaceholder.typicode.com/todos/1", method: .get)
        .responseJSON { (response) in

            switch response.result {
            case .success(_):
                if let JSON = response.result.value as? [String: Any] {
                    let status = JSON["completed"] as! Bool
                    print(status)
                }



            case .failure(_): break

            }
    }

在这种情况下使用 Result< Any> 类型而不是 Result< Any, Error>,并使用 Alamofire 替代 AF。

我的Xcode中的pod安装出了一些问题。如果您有任何版本的Alamofire,能否请分享给我? - Siva Sankar
@SivaSankar,你不需要在我的Podfile中提及Alamofire的版本。我只需简单地写上pod 'Alamofire',默认情况下它会安装最新稳定版本4.8.2。如果这个方法可行,请将我的回答标记为有效,并告诉我一声。 - Bikram Aryal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接