Swift失败:类型不匹配(Swift.Array <any>)

时间:2018-07-29 15:12:18

标签: json swift model

有没有人可以帮助我修复模型?似乎与API Response中的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
}

Still got error like this

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

原则上,您的回复结构是可以的,您可以在以下Playground中看到:

l = ['a', 'b', 'c']
del l[1]
print(l)  # ['a', 'c']
print(l[1]) # c

这将解析没有错误。由于我不太了解AlamoFire,因此我不得不假设您的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) } 闭包类型出了问题。它会“以某种方式”猜测您要解析completion以便对您的响应有任何意义。

也许您会更轻松地使用ObjectBank