我正在做一个 api 调用并得到回复。
假设,响应是这样的
{
data: {
name: 'Varun',
id: 'szjsns3d',
email: '[email protected]'
}
}
这是我的快速代码
guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200, let createMeetingData = data else {
return
}
do{
let createMeetingResponse = try JSONSerialization.jsonObject(with: createMeetingData, options: []) as? [String : AnyObject]
我想通过这样做[String : AnyObject]
,我将能够做这样的事情
print(createMeetingResponse.data.id);
但这会引发错误
'[String : AnyObject] 类型的值?没有成员“数据”
然后我考虑为它创建一个类型(来自打字稿背景),但我找不到这样做的方法。
我能够使用可编码的 api 请求参与的答案。(使用 codeable 进行编码和解码)。
有人可以帮我弄清楚如何在不使用可编码的情况下实现这一目标吗?
我尝试使用可解码但它一直给我错误
类型“CreateMeetingResponse”不符合协议“Decodable”
这就是我制作可解码的方式
struct MeetingResponse {
let id: String
let name: String
let email: String
}
struct CreateMeetingResponse:Decodable {
let data:MeetingResponse
}
你需要
if let res = createMeetingResponse["data"] as? [String:Any] {
if let id = res["id"] as? String {
print(id)
}
}
但最好使用 Codable
do {
let res = try JSONDecoder().decode(Root.self, from: createMeetingData)
print(res.data.id)
}
catch {
print(error)
}
struct Root: Codable {
let data: DataClass
}
struct DataClass: Codable {
let name, id, email: String
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句