Я не так давно изучаю эту тему и еще не владею всеми тонкостями! Проблема вот в чем !
при декодирование данных получаю эту ошибку typeMismatch(Swift.Array<Any>, Swift.DecodingError.Context(codingPath: [], debugDescription: "Expected to decode Array<Any> but found a dictionary instead.", underlyingError: nil))
Мне нужно вывести на экран некоторые данные. Структуру декодирования писал изначально сам но потом использовал https://quicktype.io
struct OtherDetailCompany: Codable {
let emails: [String]
let categoriesId: [String]
let address: String
let id: String
let bankDetails: BankDetails
let contactPeople: ContactPeople
let companyRegionsId: [String]
let description: String
let logo: String
let postAddress: String
let faxes: String
let employeesNumber: Int
let importRegionsId: [String]
let openHours: OpenHours
let name: String
let phones: String
let sitesUrl: String
let productsAndOffers: String
let slug: String
let yearOfFoundation: String
}
struct BankDetails: Codable {
let companyRegistrationNumber: Int
}
struct ContactPeople: Codable {
let director: String
}
struct OpenHours: Codable {
let monFri: String
let satSun: String
}
extension OtherDetailCompany {
static func from(json: String, using encoding: String.Encoding = .utf8) -> OtherDetailCompany? {
guard let data = json.data(using: encoding) else { return nil }
return OtherDetailCompany.from(data: data)
}
static func from(data: Data) -> OtherDetailCompany? {
let decoder = JSONDecoder()
return try? decoder.decode(OtherDetailCompany.self, from: data)
}
var jsonData: Data? {
let encoder = JSONEncoder()
return try? encoder.encode(self)
}
var jsonString: String? {
guard let data = self.jsonData else { return nil }
return String(data: data, encoding: .utf8)
}
}
extension BankDetails {
enum CodingKeys: String, CodingKey {
case companyRegistrationNumber
}
}
extension ContactPeople {
enum CodingKeys: String, CodingKey {
case director
}
}
extension OpenHours {
enum CodingKeys: String, CodingKey {
case monFri = "Mon-Fri"
case satSun = "Sat-Sun"
}
}
extension OtherDetailCompany {
enum CodingKeys: String, CodingKey {
case emails
case categoriesId
case address
case id = "_id"
case bankDetails
case contactPeople
case companyRegionsId
case description
case logo
case postAddress
case faxes
case employeesNumber
case importRegionsId
case openHours
case name
case phones
case sitesUrl
case productsAndOffers
case slug
case yearOfFoundation
}
}
Сам JSON имеет такую структуру:
{
"_id": "59ed263b0e0742b928d1d8c9",
"slug": "palmyradent",
"name": "ПАЛЬМІРА ДЕНТ, ПП",
"logo": "16485.png",
"emails": [
"palmyradent@mail.ru"
],
"phones": "+38 (0532) 509979",
"postAddress": "36028 м. Полтава, вул. Великотирнівська, 10/61 к. 91",
"address": "36000 г. Полтава, ул. Сенная, 4а",
"faxes": "+38 (0532) 508908",
"contactPeople": {
"director": "Северин Наталья Ивановна"
},
"openHours": {
"Mon-Fri": "09:00 - 18:00",
"Sat-Sun": "Выходные"
},
"employeesNumber": 22,
"bankDetails": {
"companyRegistrationNumber": 33891073
},
"productsAndOffers": "все виды протезирования (несъемное и съемное протезирование, металлокерамические и цельнолитые конструкции, временное протезирование, изготовление пластинчатых и мягких протезов любой сложности)\r\nортодонтия (исправление кривизны зубного ряда и неправильного прикуса с помощью брекет-системы у детей и взрослых)\r\nдиагностика (с помощью цифрового панорамного рентгеновского оборудования, с минимальной дозой облучения)\r\nпрофилактика кариеса (герметизация фисур)\r\nтерапевтические стоматологические услуги (лечение кариеса, пульпита, периодонтита, лечение каналов любой сложности, восстановление зубов до первоначального вида)\r\nкомплексная парадонтология (удаление зубного камня ультразвуком, лечение слизистой, шинирование и отбеливание зубов, лечение пародонтита и пародонтоза)/ Зуботехническая лаборатория\r\nпанорамный снимок зубов – ортопантомограмму.",
"categoriesId": [
"912",
"59ed26240e0742b928d19394",
"59ed26240e0742b928d19392",
"59ed26240e0742b928d19391",
"608",
"59ed26240e0742b928d1930a",
"59ed26240e0742b928d19303",
"59ed26240e0742b928d192f4",
"574",
"59ed26240e0742b928d19302",
"59ed26240e0742b928d192fa",
"550",
"59ed26240e0742b928d192fe",
"228",
"59ed26240e0742b928d1928f",
"59ed26240e0742b928d1928d",
"59ed26240e0742b928d1925f",
"1460"
],
"companyRegionsId": [
"59ed26230e0742b928d19136",
"59ed26230e0742b928d19137",
"59ed26220e0742b928d18f7c",
"59ed26220e0742b928d18f7b"
]
}
Запрос выглядит таким образом:
guard let url = URL(string: urlString) else {return}
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error != nil{
print(error!.localizedDescription)
}
guard let data = data else { return }
do {
let companyData = try JSONDecoder().decode([OtherDetailCompany].self, from: data)
DispatchQueue.main.async {
print(companyData)
self.detailCompany = companyData
self.tableView?.reloadData()
}
} catch let jsonError{
print(jsonError)
}
}.resume()
Не могу найти где ошибка(
Помогите пожалуйста.