首页 > 解决方案 > 我获取的全部数据都存储在数组的第一个索引中

问题描述

这是我的结构

这是比我想要填充 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。

标签: iosarraysjsonswiftdecodable

解决方案


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

在完成处理程序更改

self.news = [info]

self.news.append(info)

推荐阅读