我对"解码器"有一点问题,我使用URLSession和Xcode 11.3。这是错误消息参数类型"数据"不符合预期的类型"解码器"检查一下
杰伦
[
{
"id": 1,
"titel": "Telefonständer",
"ersteller": "von Mike-vom-Mars",
"urlLink": "https://www.thingiverse.com/thing:3513800",
"mehr": "Faltbarer Tablet- und Handyhalter, der fünf verschiedene Kipppositionen ermöglicht. Dieser Halter benötigt keine Schrauben, einfach ausdrucken und zusammenstecken. Sehr stabil, platzsparend und tragbar."
},
{
"id": 2,
"titel": "Tool Caddy",
"ersteller": "von Tom Link",
"urlLink": "https://www.thingiverse.com/thing:2849473",
"mehr": "Ein einfacher Werkzeugwagen für den 3D-Druck. Ca. 4,75 x 3,125 x 1,3 Zoll. Hält Messer, Pinzetten, Rasierklingenschaber, Klebestift, SD-Kartenadapter und ein Abfallfach."
},
{
"id": 3,
"titel": "Honey, I'm Home!",
"ersteller": "von Luz Cabrera und Malorie Pangilinan",
"urlLink": "https://www.behance.net/gallery/16925735/Honey-Im-Home",
"mehr": "Honig-Schlüsselanhänger. Wenn Sie direkt auf die endgültige Farbe drucken, empfehle ich, 100% für das Rahmenteil und 105% für die kleinen Teile zu verwenden, damit sie besser in die Löcher passen. Wenn Sie jedoch die Teile bemalen, empfehle ich 100% beide."
}
]
func getRequest(completion: @escaping ([Model]?) -> Void) {
let url = URL(string: "http://localhost" + ":" + "8080" + "/" + "printdata")!
let task = URLSession.shared.dataTask(with: url) {
(data, response, error) in
let jsonDecoder = JSONDecoder()
if let data = data,
var categories = try? jsonDecoder.decode([Model].self, from: data) {
completion(categories)
for reply in data{
print("Show: (reply)")
categories.append(Model(from: data))
}
} else {
print("ERROR")
completion(nil)
}
//debugPrint(String(data: data!, encoding: .utf8))
}
task.resume()
}
和我的模型:
struct Model: Decodable{
var id: Int
var titel: String
var ersteller: String
var mehr: String
var urlLink: String?
init(id: Int, titel: String, ersteller: String, mehr: String, urlLink: String) {
self.id = id
self.titel = titel
self.ersteller = ersteller
self.mehr = mehr
self.urlLink = urlLink
}
}
循环for reply in data
没有意义,数据已经完全解码,删除它,这修复了错误。
并且不要try?
,总是捕捉错误。
func getRequest(completion: @escaping ([Model]?) -> Void) {
let url = URL(string: "http://localhost" + ":" + "8080" + "/" + "printdata")!
let task = URLSession.shared.dataTask(with: url) {
(data, response, error) in
if let error = error {
print("Connection error", error)
completion(nil)
} else {
do {
let jsonDecoder = JSONDecoder()
let categories = try jsonDecoder.decode([Model].self, from: data!)
completion(categories)
} catch {
print("Decoding error", error)
completion(nil)
}
}
//debugPrint(String(data: data!, encoding: .utf8))
}
task.resume()
}
不需要Model
中的 init 方法,结构成员可能是常量
struct Model: Decodable {
let id: Int
let titel: String
let ersteller: String
let mehr: String
let urlLink: String?
}
也许你得到的JSON不是模型数组?
您可以打印出响应字符串以检查是否获得了正确的类型。
您的响应数据似乎与结构中的项目不匹配。评论仅是回应
可选( { URL: localhost:8080/printdata } { 状态代码: 200, 标头 { 连接 = ( "保持活动" (;"内容长度" = ( 1068 (;"内容类型" = ( "应用程序/json;字符集=UTF-8" (;日期 = ( "星期二, 14 一月 2020 09:00:41 GMT" (;} ckquote
.请将您获得的数据转换为 JSON/字符串并将其发布在此处。这将有助于我们回答