Как только я получу фундаментальные результаты в консоли, Как поместить их в структуру? - PullRequest
0 голосов
/ 05 мая 2019

Я выполнил весь процесс извлечения из JSON результатов трех массивов (имя, исполнитель и цена), которые у меня есть в консоли.Теперь мне нужно поместить их в struct-массив, который я буду использовать для окончательного заполнения моего tableView.Я застрял здесь.

Я попытался назначить последнюю постоянную строку в консоли в качестве аргументов свойства struct.Я подумал, что мог бы использовать их в методе добавления для выполнения моего struct-array.Я что-то здесь упустил.Я не могу заполнить свой массив.Я не использую фактический протокол Codable в Swift 3, потому что считаю важным, чтобы мои знания четко поняли его перед атакой последних обновлений Swift.

do {if let json = try JSONSerialization.jsonObject (with: data,варианты: []) как?[String: Any] {

                let results = json as? [String: Any]
                if let feed = results!["feed"] as? [String: Any]{
                    if let entry = feed["entry"] as?  [[String: Any]]{
                        for item in entry{
                            if let price = item["im:price"] as? [String: Any]{
                                if let labelPrice = price["label"] as? String{
                                    print(labelPrice)
                                    self.topTen.songPrice = labelPrice
                                }
                            }
                        }
                        for item2 in entry{
                            if let name = item2["im:name"] as? [String: Any]{
                                if let labelName = name["label"] as? String{
                                    print(labelName)
                                    self.topTen.name = labelName
                                }
                            }
                        }
                        for item3 in entry{
                            if let artist = item3["im:artist"] as? [String: Any]{
                                if let labelArtist = artist["label"] as? String{
                                    print(labelArtist)
                                    self.topTen.artist = labelArtist
                                }
                            }
                        }
                    }
                }
                DispatchQueue.main.async {
                self.tableView.reloadData()
                }
            }
        }
        catch{
            print(error.localizedDescription)
        }

    }
    task.resume()
}

Если я вставлю: topTenArray.append ((TopTen (имя: topTen.name, исполнитель: topTen.artist, songPrice: topTen.songPrice))), я могу 'Заполните массив либо.

1 Ответ

0 голосов
/ 06 мая 2019

Вам нужно создать свой структурный объект в локальной переменной и добавить этот объект в ваш массив следующим образом.И не нужно несколько циклов на одном объекте.Вы можете сделать просто так.

let results = json as? [String: Any]

                if let feed = results!["feed"] as? [String: Any] {

                    if let entry = feed["entry"] as?  [[String: Any]] {

                        for item in entry {

                            let topTen = YourTopTenStructure()

                            if let price = item["im:price"] as? [String: Any]{
                                if let labelPrice = price["label"] as? String{
                                    print(labelPrice)
                                    topTen.songPrice = labelPrice
                                }
                            }

                            if let name = item["im:name"] as? [String: Any]{
                                if let labelName = name["label"] as? String{
                                    print(labelName)
                                    topTen.name = labelName
                                }
                            }

                            if let artist = item["im:artist"] as? [String: Any]{
                                if let labelArtist = artist["label"] as? String{
                                    print(labelArtist)
                                    topTen.artist = labelArtist
                                }
                            }

                        topTenArray.append(topTen)

                       }
                    }
                }
                DispatchQueue.main.async {
                self.tableView.reloadData()
                }
            }
        }
        catch{
            print(error.localizedDescription)
        }

    }
    task.resume()
...