簡體   English   中英

數組 github Api Swift 中沒有數據

[英]No Data in array github Api Swift

如何將 if let 語句中的“名稱”獲取到我的表視圖中? 代碼立即觸發 else 塊。 我正在嘗試從 github api 解析名稱數據。 這是代碼:

import UIKit
import Foundation

class ViewController: UITableViewController {

var tableArray = [String] ()

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.dataSource = self
    self.tableView.delegate = self
    parseJSON()

}

func parseJSON () {

    let url = URL(string: "https://api.github.com")

    let task = URLSession.shared.dataTask(with: url!) {(data, response, error ) in

    guard error == nil else {
        print("returned error")
        return
    }

    guard let content = data else {
        print("No data")
        return
    }

    guard let json = (try? JSONSerialization.jsonObject(with: content, 
options: JSONSerialization.ReadingOptions.mutableContainers)) as? 
[String: Any] else {
        print("Not containing JSON")
        return
    }

    if let array = json["name"] as? [String] {
        self.tableArray = array
    } else {

        print("Name is blank")

        }

    print(self.tableArray)

    DispatchQueue.main.async {
        self.tableView.reloadData()
    }


    }

    task.resume()
}

}

extension ViewController {

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as UITableViewCell
    cell.textLabel?.text = self.tableArray[indexPath.row]

    return cell
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return self.tableArray.count



}

}

現在它在控制台中顯示“名稱為空”。 我正在嘗試獲取用戶的姓名並將其顯示在表格視圖中。 其他網址似乎有效,但我似乎無法弄清楚 Github。 謝謝您的幫助。

你的錯誤是。
1. 使用了錯誤的網址。
2.映射響應錯誤

https://api.github.com返回 Api 列表。
https://api.github.com/users/返回用戶列表。

函數 fetchNameOfUsers
1.使用“用戶列表”url實現請求。
2. 通過使用“用戶列表”結構映射響應。

func fetchNameOfUsers() {
  guard let url = URL(string: "https://api.github.com/users") else {
    return
  }
  let request = URLRequest(url: url)
  URLSession.shared.dataTask(with: request) { data, response, error in
    guard error == nil else {
      return // Error
    }
    guard let data = data, let _ = response else {
      return // No data
    }
    guard let json = try? JSONSerialization.jsonObject(with: data, options: []) as? [[String: Any]] else {
      return // Not [String: Any] list
    }
    let nameOfUsers = json.compactMap {
      $0["login"] as? String
    }
    let displayedNameOfUsers = nameOfUsers.joined(separator: ", ")
    print(displayedNameOfUsers)
  }.resume()
}

要查看結果調用函數 fetchNameOfUsers。

fetchNameOfUsers()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM