Swift 5 Как получить JSON многослойных данных для добавления? - PullRequest
1 голос
/ 07 января 2020

Пожалуйста, помогите мне, я пытаюсь получить массив внутри массива. Примените его к пользовательскому табличному представлению с заголовками и разделами, заголовки - это первый массив, разделы - второй.

Я добавил комментарий в строке: print (subData.name), не могу понять это, как получить этот массив внутри массива.

Также я пытаюсь использовать эти JSON данные в табличном представлении с заголовками и разделами.

Спасибо, что помогли мне заранее, ценю ваше время .

Код Swift:

struct getSubData: Decodable {
    let id: Int
    let name: String
}

struct Section: Decodable {
    let id: Int
    let name: String
    let subData: [getSubData]
}

class MobileBrand {
    var brandName: String?
    var modelName: [String]?
    init(brandName: String, modelName: [String]) {
        self.brandName = brandName
        self.modelName = modelName
    }
}

class indexViewController: UIViewController {
    @IBOutlet weak var tableView: UITableView!
    var mobileBrand = [MobileBrand]()
    override func viewDidLoad() {
        super.viewDidLoad()
        let url = "https://nabulsi.com/nabulsi_app/main_sections_v4.json"
                             let urlObj = URL(string: url)
                             URLSession.shared.dataTask(with: urlObj!){(data, response, error) in
                                 do {
                                     let sections = try JSONDecoder().decode([Section].self, from: data!)
                                     //print(sections[0].subData[0].name)
                                     //print(section.subData)
                                     //print(sections.count)
                                     //print(sections[0].subData[0])
                                     for section in sections {
                                         print(section.name)
                                         print(subData.name)  //couldn't figure this out
                                     }
                                 } catch {
                                     print("We got an error")
                                 }
                             }.resume()


        // How to change the data below with JSON above.

        mobileBrand.append(MobileBrand.init(brandName: "Apple", modelName: ["iPhone 5s","iPhone 6","iPhone 6s", "iPhone 7+", "iPhone 8"]))
        mobileBrand.append(MobileBrand.init(brandName: "Samsung", modelName: ["Samsung M Series", "Samsung Galaxy Note 9", "Samsung Galaxy Note 9+"]))
        mobileBrand.append(MobileBrand.init(brandName: "Mi", modelName: ["Mi Note 7", "Mi Note 7 Pro", "Mi K20"]))
        mobileBrand.append(MobileBrand.init(brandName: "Huawei", modelName: ["Huawei Mate 20", "Huawei P30 Pro"]))
    }
}

JSON Данные:

[
  {
         "name": "MAIN NAME 1 v4",
         "id": 1,
         "subData": [
             {
               "name": "1 NAME 1",
               "id": 101,
             },
             {
               "name": "1 NAME 2",
               "id": 102,
             },
             {
               "name": "1 NAME 3",
               "id": 103,
             },
             {
               "name": "1 NAME 4",
               "id": 104,
             }

         ],

     },


     {
            "name": "MAIN NAME 2 v4",
            "id": 2,
            "subData": [
                {
                  "name": "2 NAME 1",
                  "id": 201,
                },
                {
                  "name": "2 NAME 2",
                  "id": 202,
                },
                {
                  "name": "2 NAME 3",
                  "id": 203,
                }
            ],

        },

        {
               "name": "MAIN NAME 3 v4",
               "id": 3,
               "subData": [
                   {
                     "name": "3 NAME 1",
                     "id": 301,
                   },
                   {
                     "name": "3 NAME 2",
                     "id": 302,
                   },
                   {
                     "name": "3 NAME 3",
                     "id": 303,
                   }
               ],

           },

  ]

1 Ответ

1 голос
/ 07 января 2020

У вас есть два (вложенных) массива, поэтому вам нужно два (вложенных) цикла

for section in sections {
    print(section.name)
    for data in section.subData {
        print(data.name)
    }
}

В табличном представлении внешние массивы представляют секции, а внутренние массивы - строки.

MobileBrand не имеет отношения к данным JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...