gpt4 book ai didi

swift - API 调用似乎正在遍历并收集数据,但数据未显示在我的自定义表格 View 单元格中

转载 作者:行者123 更新时间:2023-11-30 12:17:49 24 4
gpt4 key购买 nike

我正在进行一个 API 调用,该调用似乎正在遍历并收集数据(使用打印和断点),但似乎仍然遇到数据未显示在自定义单元格中的问题。有人可以看一下并帮助我吗?

这是我的 TableView Controller :

    var fightersArray: [UFCFighter]?

override func viewDidLoad() {
super.viewDidLoad()
fetchFighter { (_) in
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}

// MARK: - Table view data source

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return fightersArray?.count ?? 0
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "fighterCell", for: indexPath) as? UFCFighterTableViewCell else { return UITableViewCell() }

cell.fighter = fightersArray?[indexPath.row]

return cell
}

func fetchFighter(completion: @escaping ([UFCFighter]?) -> Void) {
guard let url = URL(string: "http://ufc-data-api.ufc.com/api/v1/us/fighters") else { return }
let task = URLSession.shared.dataTask(with: url, completionHandler: {
(data, response, error) -> Void in

if error != nil {
print(error!.localizedDescription)
completion(nil)
} else {

do {

let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments)

for dictionary in json as! [[String: Any]] {

let fighters = UFCFighter()
fighters.firstName = dictionary["first_name"] as? String
fighters.lastName = dictionary["last_name"] as? String
fighters.weightClass = dictionary["weight_class"] as? String
fighters.wins = dictionary["wins"] as? Int
fighters.losses = dictionary["losses"] as? Int
fighters.imageURL = dictionary["thumbnail"] as? String
self.fightersArray?.append(fighters)
completion(self.fightersArray)
self.tableView.reloadData()

print(fighters)
}

} catch {

print("error in JSONSerialization")
}
}
})
task.resume()
}
}

这是我的自定义单元格:

    var fighter: UFCFighter? {
didSet {
self.nameLabel.text = self.fighter?.fullName
self.weightClassLabel.text = self.fighter?.weightClass
self.recordLabel.text = "Wins: \(String(describing: self.fighter?.wins)) - Losses: \(String(describing: self.fighter?.losses))"
self.setupThumbnailImage()
}
}

func setupThumbnailImage() {
if let thumbnailImageURL = fighter?.imageURL {
guard let url = URL(string: thumbnailImageURL) else { return }
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
if error != nil {
print(error!.localizedDescription)
}

DispatchQueue.main.async {
self.fighterImage.image = UIImage(data: data!)
}
})
task.resume()
}
}

@IBOutlet weak var fighterImage: UIImageView!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var weightClassLabel: UILabel!
@IBOutlet weak var recordLabel: UILabel!
}

希望这不是一个愚蠢的问题,因为我正在努力提高我的 API 技能。

最佳答案

您的 varfightersArray: [UFCFighter]? 在您附加它时为零,您需要先实例化该数组,然后才能执行此操作。

例如,您可以将其更改为 varfightersArray: [UFCFighter] = [] 它将起作用。通过设置默认值(空数组),将其保留为可选值是不合逻辑的,因此我删除了 ?

或者不使用追加,而是直接使用获取的数据设置fighersArray:self.fightersArray = 战士

关于swift - API 调用似乎正在遍历并收集数据,但数据未显示在我的自定义表格 View 单元格中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com