这是我从服务器收到的JSON数据:
[{
"_id": someRandomID;
comment = {
identifier = someRandomIdentifier;
text = someRandomText;
};
}]
我正在使用socket.io
,我从socket.on()
获取数据,如下所示:
socket?.on("add-comment") {data, ack in
print(data)
}
我尝试为它创建一个类,如下所示:
class addComment: Codable {
let _id: String
let comment: comments
}
class comments: Codable {
let identifier: String
let text: String
init(identifier: String, text: String) {
self.identifier = identifier
self.text = text
}
}
并在socket.on中添加了以下代码:
socket?.on("add-comment") {data, ack in
let decoder = JSONDecoder()
let comment = decoder.decode(addComment.self, from: data)
}
它向我展示了以下内容:
无法转换类型' [Any]'预期参数类型'数据'
任何人都可以指导我如何将我从服务器收到的数据对象转换为swift中的可读对象,以便能够访问其值?
答案 0 :(得分:0)
您在完成处理程序中获取此数组,data
{<1}}
Data
要使用let data : [Any] = [["_id": "someRandomID",
"comment" : ["identifier" : "someRandomIdentifier",
"text" : "someRandomText"]
]
]
,您需要将数组序列化为JSON
这些是符合Swift命名约定的类
Codable
这是使数组class AddComment: Codable {
private enum CodingKeys : String, CodingKey {
case id = "_id", comment
}
let id: String
let comment: Comment
}
class Comment: Codable {
let identifier: String
let text: String
}
符合
Codable
答案 1 :(得分:0)
在要创建的对象周围添加方括号,json是(1)对象的数组,而不是对象。
试试这个:
let comments = decoder.decode([addComment].self, from: data)
(同样,你的班级名称为复数而没有启动资金,这非常令人困惑)