对表格视图的每个单元格的 Alamofire 请求
Posted
技术标签:
【中文标题】对表格视图的每个单元格的 Alamofire 请求【英文标题】:An Alamofire request for each cell of a table view 【发布时间】:2018-01-15 14:54:29 【问题描述】:我想通过解析由于多个 Alamofire 请求而收到的 JSON 数据来填充表格视图。然而,问题是每个单元都有不同的请求。每个单元格都根据 IndexPath 发出请求。由于调用是异步的,所以并不是所有的请求都能实现……
我的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
var name = ""
let url = "https://........"+items[indexPath.section][indexPath.row]+"......"
Alamofire.request(url).responseJSON (responseData) -> Void in
if((responseData.result.value) != nil)
let swiftyJsonVar = JSON(responseData.result.value!)
let object = swiftyJsonVar["results"][0]
print(object)
name = object["name"].stringValue
cell.textLabel?.text = name
return cell
如何实现每个请求?提前致谢!
【问题讨论】:
问题是 cellForRowAt 没有保留数据,并且当您上下滚动时会一次又一次地发出请求......所以也许您必须考虑缓存数据。 【参考方案1】:您应该跟踪每个请求的挂钩 indexpath,以便您知道返回的值是什么
struct Item
var indexPath:NSIndexPath!
func getData(index:NSIndexPath)
let url = "https://........"+items[indexPath.section][indexPath.row]+"......"
Alamofire.request(url).responseJSON (responseData) -> Void in
if((responseData.result.value) != nil)
let swiftyJsonVar = JSON(responseData.result.value!)
let object = swiftyJsonVar["results"][0]
globalArr// store indexpath and value
/// remove indexoath from allDownloads
/// send refresh to table
在行的单元格中
if(indexPath in globalArr)
// show it
else
// check whether it's download is in progress to avoid multiple same requests when scroll because of dequeuing
if(allDownloads doesn't contain inexpath)
// create object of item and start download
// allDownloads.add(object)
globalArr:跟踪所有下载的对象
allDownloads :跟踪正在进行的下载
【讨论】:
好的,我了解您的解决方案,但它可以让我提出几个 Alamofire 请求吗? 使用,它会为每个请求创建对象 数组allDownloads和globalArr一样吗?? 谢谢!所以在代码的第二部分,你应该写 if(indexPath in globalArr) 对吧?以上是关于对表格视图的每个单元格的 Alamofire 请求的主要内容,如果未能解决你的问题,请参考以下文章