![](/img/trans.png)
[英]Facebook SDK with Swift 4/Xcode 10: Argument type 'SDKLoggingBehavior?' does not conform to expected type 'Sequence'
[英]Xcode Swift Argument type does not conform to expected type 'Decoder'
我使用 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 不是模型數組?
您可以打印出響應字符串以檢查您的類型是否正確。
看來您的 responsedata 與結構中的項目不匹配。 評論只是回應
可選( { 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 並在此處發布。 這將有助於我們回答
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?
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.