gpt4 book ai didi

ios - Xcode Swift 参数类型不符合预期类型 'Decoder'

转载 作者:行者123 更新时间:2023-11-29 05:10:32 24 4
gpt4 key购买 nike

我使用 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
}

}

最佳答案

循环用于数据回复没有任何意义,数据已经完全解码,删除它,这修复了错误。

并且不要尝试?,总是捕获错误。

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?
}

关于ios - Xcode Swift 参数类型不符合预期类型 'Decoder',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59729869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com