【发布时间】:2020-04-30 22:45:40
【问题描述】:
我使用 URLSession 和 Xcode 11.3 的“解码器”有点问题。这是错误消息参数类型“数据”不符合预期的类型“解码器”检查一下
JSON
[
{
"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
}
}
【问题讨论】:
-
添加你得到的 JSON。
-
这段代码与 Alamofire 完全无关,为什么你要解码两次数据?顺便说一句
reply是一个字节,循环没有意义。 -
一开始不是Alamofire,你使用的是URLSession。添加您的 Json 数据响应以检查解码错误。
标签: ios swift xcode urlsession