Я почти уверен, что моя проблема легко решается, но я не могу найти никакого решения. Итак, у меня есть запрос Alamofire, и у меня проблемы с обработкой типов данных. У меня так много «распечаток», чтобы шаг за шагом проверить, какие данные у меня есть.
Alamofire.request(URL, method: .get, headers: headers).responseJSON { response in
switch responseJSON.result {
case .success(let value):
print(type(of: value)) //__NSDictionaryI
print(value)
print(type(of:responseJSON)) //DataResponse<Any>
print(responseJSON) . //SUCCESS: {"billing_addresses" = (...
print(responseJSON.value as Any) . //Optional({...
//print(responseJSON.value as! [[String:Any]]) . //Could not cast value of type '__NSDictionaryI' (0x10b9fb508) to 'NSArray' (0x10b9fb008).
do {
let decoder = JSONDecoder()
let model = try decoder.decode(Info.self, from: value as! Data) //Decode JSON Response Data
print(model.id)
} catch let parsingError {
print("Error", parsingError)
}
Теперь у меня ошибка: **Could not cast value of type '__NSSingleEntryDictionaryI' (0x10d240f78) to 'NSData' (0x10d241090).**
значение responseJSON:
(Я не уверен, что это значение правильное, потому что, когда я проверяю в Postman, все строки заключаются в двойные кавычки, а значение «is_default» равно true/false, а не 0/1. Но в Xcode у меня есть это в консоли.. Так может проблема в responseJSON?..)
А адресов может быть ноль, а может быть и несколько.
{
"id": 40128,
"username": "test6",
"email": "[email protected]",
"billing_addresses": [
{
"address_name": null,
"country_code": "US",
"first_name": "Ted",
"last_name": "Qqqq",
"company_name": "",
"address_line1": "308 Sea Lane",
"address_line2": "",
"city": "QQQQ",
"state": "FL",
"postcode": "32000",
"email_address": "[email protected]",
"phone_number": "11111111",
"is_default_for_billing": true
}
],
"shipping_addresses": [
{
"address_name": null,
"country_code": "US",
"first_name": "Ted",
"last_name": "Qqqq",
"company_name": "",
"address_line1": "308 Sea Lane",
"address_line2": "",
"city": "QQQQ",
"state": "FL",
"postcode": "32000",
"is_default_for_shipping": true
}
]
}
А вот модель
struct Info : Decodable {
let id: Int
let email: String
let username: String
let billing_addresses: Billings
let shipping_addresses: Shippings
}
struct Billings: Decodable{
let address_name: String
let country_code: String
let first_name: String
let last_name: String
let company_name: String
let address_line1: String
let address_line2: String
let city: String
let state: String
let postcode: String
let email_address: String
let phone_number: String
let is_default_for_billing: Bool
}
struct Shippings:Decodable{
let address_name: String
let country_code: String
let first_name: String
let last_name: String
let company_name: String
let address_line1: String
let address_line2: String
let city: String
let state: String
let postcode: String
let is_default_for_shipping: Bool
}
Если я попытаюсь использовать SwiftyJSON с value
в качестве параметра, у меня возникнет ошибка, что Any
не может быть Data
, и я действительно не знаю, что мне делать.
let shipping_addresses: Shippings[]
?? - person Piotr Kula   schedule 23.08.2018