我提取的全部数据存储在数组的第一个索引中

时间:2019-08-08 14:43:30

标签: ios arrays json swift decodable

这是我的结构

这是比我要填充20个id的数组。

var news = [All]()

这是一个id的数据。我想获取前20个ID的信息。

{
    "by": "jonbaer",
    "descendants": 57,
    "id": 20643604,
    "kids": [
        20643886,
        20644273,
        20644769,
        20643937,
        20643955,
        20644451,
        20643969,
        20643915,
        20643904,
        20643858,
        20644046
    ],
    "score": 242,
    "time": 1565264884,
    "title": "AMD lands Google, Twitter as customers with newest server chip",
    "type": "story",
    "url": "https://www.reuters.com/article/us-amd-alphabet/amd-lands-google-twitter-as-customers-with-newest-server-chip-idUSKCN1UX2KL"
}

这是我的提取功能。我正在使用整数数组。我想获取前20个ID的数据。

func fetchInfo(of Id: [Int], completion: @escaping 
(Result<All,Error>) -> Void){

    for i in 0..<20 {

    guard let url = URL(string: "https://hacker-news.firebaseio.com/v0/item/\(Id[i]).json") else { return }
    URLSession.shared.dataTask(with: url) { (data, response, error) in

      if let error = error {
        completion(.failure(error))
        return
      }
      guard let jsonData = data else { return }
      do{

        let info = try JSONDecoder().decode(All.self, from: jsonData)

        completion(.success(info))

      }catch let error {
        completion(.failure(error))
      }

    }.resume()
    }
}

首先,我获取id并将其存储到数组中,然后传递整数数组并尝试打印,但它不起作用。

NetworkManager.shared.fetchIds { (result) in

      switch result {
      case .success(let id):
        self.users = id
          print("\(self.users) + \(self.users.count)")
        NetworkManager.shared.fetchInfo(of: self.users, completion: { (result) in
          switch result {
          case .success(let info):
            self.news = [info]
            self.news.forEach({ (item) in
              print(item.title + item.username)
            })
            DispatchQueue.main.async {
              self.tableView.reloadData()
            }
          case .failure(let error):
            print(error)
          }
        })
      case .failure(let error):
        print(error)
      }

  }

启动应用程序时。我的第一个单元格由1到20信息更新。我要按顺序20个单元格和20个信息。 0至19。

1 个答案:

答案 0 :(得分:0)

对于每个答案,您都会创建一个新数组并将其分配给您的news数组,但您需要做的是追加每个答案

在完成处理程序中更改

self.news = [info]

self.news.append(info)
相关问题