从“数据?”到不相关的类型 '[String : Any]' 总是失败
Posted
技术标签:
【中文标题】从“数据?”到不相关的类型 \'[String : Any]\' 总是失败【英文标题】:Cast from 'Data?' to unrelated type '[String : Any]' always fails从“数据?”到不相关的类型 '[String : Any]' 总是失败 【发布时间】:2018-09-19 10:39:00 【问题描述】:从“数据?”投射到不相关的类型 '[String : Any]' 总是失败
在这里,我正在尝试从 Api 获取响应并第一次使用 alamofire,但我得到了警告,请帮帮我
guard let json = response.result.value as? [String: Any] else
print("Didn't get todo object as JSON from API")
if let error = response.result.error
print("Error: \(error)")
return
如果有的话我应该改变什么,请帮忙。
【问题讨论】:
【参考方案1】:你必须做的改变是上面一行。
你必须告诉请求得到反序列化的响应而不是原始的Data
Alamofire.request( [...] ).responseJSON
【讨论】:
请详细描述一下,我是 swift 和 alamofire 的新手,还有一件事我使用过 responseData Alamofire.request(todosEndpoint, method: .post, parameters: newTodo, encoding: URLEncoding.default ,headers:nil) .responseData response in guard response.result.error == nil else // 获取数据出错,需要处理 print("error calling POST on /todos/1") print( response.result.error!) 返回 只需将responseData
替换为responseJSON
这样做了,但是在执行程序时我收到以下错误:-- responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength) at 'guard response.result.error == nil'
让 todosEndpoint: String = "abcdefg?" let newTodo: [String: Any] = ["ss": "M","ddd":"A","hhhh":"cc","vvvv":604808,"nnnb":524] Alamofire.request( todosEndpoint, 方法: .post, 参数: newTodo, 编码: URLEncoding.default,headers:nil) .responseJSON 响应中的响应 response.result.error == nil else print("error calling POST on /todos/1")打印(response.result.error!)返回
请建议我如何解决这个问题【参考方案2】:
如果你的response.result.value
是JSON数据,你可以这样获取:
guard let jsonData = response.result.value
let responseObj = try? JSONSerialization.jsonObject(with: jsonData, options: [])
if let response = responseObj as? [String: Any] print(response)
【讨论】:
以上是关于从“数据?”到不相关的类型 '[String : Any]' 总是失败的主要内容,如果未能解决你的问题,请参考以下文章
Firebase swift runTransactionBlock:从“MutableData?”转换到不相关的类型“字符串”总是失败
对“const int *”类型的非 const 左值引用不能绑定到不相关类型“int *”的值
为啥我会收到“从 '[String]' 转换为不相关的类型 'String' 总是失败”错误?