Данные из api ошибка

xcode
swift

#1

Я не так давно изучаю эту тему и еще не владею всеми тонкостями! Проблема вот в чем !
при декодирование данных получаю эту ошибку 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()

Не могу найти где ошибка(
Помогите пожалуйста.


#2

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#3

Это я понял, но все равно не могу разобраться !


#4

На это сообщение поступили жалобы от участников сообщества, поэтому оно временно скрыто.


#5

Все понял! Вот пока не ткнул не понимал. Спасибо


#6

А как исправить не подскажете ?