当我使用swift 2或3时,我想更新我的代码。我被困在我想使用Alamofire的地方,但使用它的方式发生了变化,我不知道如何使用它了。有人可以更新这部分代码并解释一下吗?谢谢。这是原始代码。
Alamofire.request(.POST, url)
.response{ (request, response, data, error) in
let xml = SWXMLHash.parse(data!)
let sunsetTime = xml["result"]["rise_and_set"]["sunset_hm"].element?.text
self.sunsetTimeLabel.text = sunsetTime
self.getDateFromString(sunsetTime,year: comp.year,month: comp.month,day: comp.day)
if (error != nil) {
print(error)
}
}这是我写的代码。
AF.request(url, method: .post).responseJSON { (responseData) in
let xml = SWXMLHash.parse(responseData as Data)
let sunsetTime = xml["result"]["rise_and_set"]["sunset_hm"].element?.text
self.sunsetTimeLabel.text = sunsetTime有一个错误说“无法在强制中将'AFDataResponse‘类型(也称为'DataResponse')的值转换为'Data’类型”
发布于 2020-03-08 10:02:59
您的第一个代码片段是Alamofire 3语法。我从第二个代码片段中推断出您现在使用的是Alamofire 5。
有几个问题:
responseJSON (只有当您的响应是JSON而不是XML时才会使用它)。使用response,或者更好地说,传递给这个闭包的responseData.response对象本身不是一个Data。对于responseData方法,它是一个AFDataResponse对象,它有一个data属性(这是一个Data?)。您必须从此AFDataResponse中提取Data对象,方法是展开data属性的内容,或者从result中提取(请参见下一点)。success或failure,然后从<代码>D22对象中提取Data。<代码>H223<代码>G224所以,把这些放在一起,你会得到类似这样的结果:
AF.request(url, method: .post).responseData { response in
switch response.result {
case .failure(let error):
print(error)
case .success(let data):
let xml = SWXMLHash.parse(data)
...
}
}https://stackoverflow.com/questions/60583815
复制相似问题