Swift: отображение массива объекта для tableView - PullRequest
0 голосов
/ 21 ноября 2018

я пытаюсь отобразить объект массива из ответа API как [[String: Any]] при просмотре таблицы, и это моя структура

class CategoriesDep: NSObject {

    var depName: String
    var depImage: String
    var subName = [subData]()

    init?(dict: [String: JSON]) {

        guard let image = dict["main_department_image"]?.imagePath, !image.isEmpty else { return nil }

        self.depImage = image
        self.depName = (dict["main_department_name"]?.string)!




    }

    struct subData {
        var dep: String
        init(dic: [String: Any]) {
            self.dep = dic["sub_department_name"] as! String

        }
    }
}

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Вы можете использовать протокол Codabel для большей скорости;) и очистки кода.

let jsonString = "[{\"sub_depart\" : [ {\"sub_department_name\" : \"hos\", \"sub_department_id\" : \"6\", \"sub_department_image\" : \"23.jpg\" } ], \"main_department_id\" : \"2\", \"main_department_name\" : \"main \", \"main_department_image\" : \"14.jpg\"}]"

struct CategoriesDep: Codable {

    let mainDepartmentName: String
    let mainDepartmentImage: String
    let mainDepartmentId: String
    var subDepart: [SubData] = []
}

struct SubData: Codable {

    let subDepartmentName: String
    let subDepartmentImage: String
    let subDepartmentId: String
}



if let jsonData = jsonString.data(using: .utf8) {

    let decoder = JSONDecoder()
    decoder.keyDecodingStrategy = .convertFromSnakeCase
    var departments: [CategoriesDep]? = try? decoder.decode([CategoriesDep].self, from: jsonData)

    ...

}

Обратите внимание на decoder.keyDecodingStrategy = .convertFromSnakeCase, который отображает имена свойств API подчеркивания (snake_case) в ваши имена camelCase.

Если вам нужны разные имена свойств, вы должны использовать перечисление CodingKeys для их сопоставления.

Для получения более подробной информации проверьте эту ссылку .

0 голосов
/ 21 ноября 2018

Пожалуйста, проверьте код ниже, чтобы проанализировать ваш json

class CategoriesDep: NSObject {
    var depName: String
    var depImage: String
    var subName = [subData]()

    init?(dict: [String: Any]) {

        guard let image = dict["main_department_image"] as? String, !image.isEmpty else { return nil }

        self.depImage = image
        self.depName = (dict["main_department_name"] as? String)!
        subName = []
        for subDict in (dict["sub_depart"] as? [[String:Any]] ?? []){
            subName.append(subData(dic: subDict))
        }

    }

}
struct subData {
     var dep: String
     var image :String
     var id : String
     init(dic: [String: Any]) {
          self.dep = dic["sub_department_name"] as! String
          self.image = dic["sub_department_image"] as! String
          self.id = dic["sub_department_id"] as! String
     }
}

, и если вы хотите получить доступ к структуре подданных вне класса CategoriesDep, тогда объявите структуру вне класса CategoriesDep

Анализ вашего заданного json Respoiseкак

       let json =  [
            [ "sub_depart" : [
                [ "sub_department_name" : "hos", "sub_department_id" : "6", "sub_department_image" : "23.jpg"
                ]
                ],
              "main_department_id" : "2",
              "main_department_name" : "main ",
              "main_department_image" : "14.jpg"
            ],
            ]
        var catDepart : [CategoriesDep] = []
        for dict in json {
            catDepart.append(CategoriesDep(dict: dict)!)
        }
        print(catDepart[0].subName[0].dep)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...