Swift FAILURE:类型 Mismatch(Swift.Array<Any>)



有人可以帮我修复模型吗?它似乎和API响应中的JSON不匹配。

来自邮递员的JSON响应

{
"error_code": 0,
"data": [
{
"kode": "001",
"name": "BANK INDONESIA PUSAT JAKARTA"
},
{
"kode": "002",
"name": "PT. BANK RAKYAT INDONESIA (Persero) Tbk."
},
{
"kode": "003",
"name": "BANK EKSPOR INDONESIA"
}
],
"msg": "OK"
}

上次编辑的型号:

struct ObjectBank: Codable {
let errorCode: Int
let data: [Bank]
let msg: String
enum CodingKeys : String, CodingKey {
case errorCode = "error_code" , data , msg
}
}
struct Bank: Codable {
let kode: String
let name: String
}

仍然有类似的错误

使用alamofire 的商店模型

private static func performRequest<T:Decodable>(route:APIRouter, 
decoder: JSONDecoder = JSONDecoder(), completion:@escaping 
(Result<T>)->Void) -> DataRequest {
//        Alamofire.request(route).responseJSON {
//            response in
//            print(response)
//        }
return Alamofire.request(route).responseJSONDecodable (decoder: 
decoder){ (response: DataResponse<T>) in
//print(response)
completion(response.result)
}
}

data是一个数组,而不是字典

let data:[Bank]

//

struct ObjectBank: Codable {
let errorCode: Int
let data: [Bank]
let msg: String
enum CodingKeys : String, CodingKey {
case errorCode = "error_code" , data , msg
}
}
struct Bank: Codable {
let kode: String
let name: String
}

//

do {
let dic = try JSONDecoder().decode(ObjectBank.self,data)
}
catch {
print(error)
}

您的响应结构原则上是可以的,您可以使用以下游乐场看到:

import Cocoa
let jsonData = """
{
"error_code": 0,
"data": [
{
"kode": "001",
"name": "BANK INDONESIA PUSAT JAKARTA"
},
{
"kode": "002",
"name": "PT. BANK RAKYAT INDONESIA (Persero) Tbk."
},
{
"kode": "003",
"name": "BANK EKSPOR INDONESIA"
}
],
"msg": "OK"
}
""".data(using: .utf8)!
struct ObjectBank: Codable {
let errorCode: Int
let data: [Bank]
let msg: String
enum CodingKeys : String, CodingKey {
case errorCode = "error_code" , data , msg
}
}
struct Bank: Codable {
let kode: String
let name: String
}
do {
let banks = try JSONDecoder().decode(ObjectBank.self, from: jsonData)
print(banks)
} catch {
print(error)
}

这将在没有错误的情况下进行分析。由于我对AlamoFire不是很了解,我不得不假设您的completion闭包类型有问题。它将"不知何故"不得不猜测您想要解析ObjectBank,以便理解您的响应。

也许你会在responseData上过得更轻松?

最新更新