Xcode Swift 参数类型不符合预期类型 'Decoder'
Xcode Swift Argument type does not conform to expected type 'Decoder'
我在使用 "Decoder" 时遇到一点问题,我使用 URLSession 和 Xcode 11.3。这是错误消息参数类型 'Data' 不符合预期类型 'Decoder' 检查一下
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不是Model数组?
您可以打印出响应字符串来检查您的类型是否正确。
您的响应数据似乎与结构中的项目不匹配。评论只是回应
Optional( { URL: localhost:8080/printdata } { Status Code: 200, Headers { Connection = ( "keep-alive" ); "Content-Length" = ( 1068 ); "Content-Type" = ( "application/json; charset=utf-8" ); Date = ( "Tue, 14 Jan 2020 09:00:41 GMT" ); } ckquote
。请在此处将您获得的数据转换为 JSON/String 和 post。这将有助于我们回答
循环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成员可以是常量
struct Model: Decodable {
let id: Int
let titel: String
let ersteller: String
let mehr: String
let urlLink: String?
}
我在使用 "Decoder" 时遇到一点问题,我使用 URLSession 和 Xcode 11.3。这是错误消息参数类型 'Data' 不符合预期类型 'Decoder' 检查一下
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不是Model数组?
您可以打印出响应字符串来检查您的类型是否正确。
您的响应数据似乎与结构中的项目不匹配。评论只是回应
Optional( { URL: localhost:8080/printdata } { Status Code: 200, Headers { Connection = ( "keep-alive" ); "Content-Length" = ( 1068 ); "Content-Type" = ( "application/json; charset=utf-8" ); Date = ( "Tue, 14 Jan 2020 09:00:41 GMT" ); } ckquote
。请在此处将您获得的数据转换为 JSON/String 和 post。这将有助于我们回答
循环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成员可以是常量
struct Model: Decodable {
let id: Int
let titel: String
let ersteller: String
let mehr: String
let urlLink: String?
}