我是初学者,我从服务器获取300个数据并将此数据存储在数组[[String:String]]中,我不希望所有这300个数据同时显示在表视图中,但是我想要以递增方式显示它,假设在表视图中每个滚动15个数据,加载15个数据后,如果用户到达表视图滚动的底部,则将加载下一个15个。
我应该这样做,因为其中一个数据实际上是一个imagePath,所以我会下载一个Image,如果我一次下载所有300个图像,将花费太多时间。
我试过了,但我无法得到我想要的东西。我简化这种情况只是使用像下面的代码一样的整数数组。你能帮我怎么做吗?在此先感谢:)
class ViewController2: UIViewController {
@IBOutlet weak var tableView: UITableView!
var data = [Int]()
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
for i in 0...300 {
data.append(i)
}
}
}
extension ViewController2 : UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
cell.textLabel?.text = "\(data[indexPath.row])"
return cell
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
}
}
答案 0 :(得分:0)
我认为你必须添加" Count"在服务器上发送你想要一次多少行,然后它由服务器数据查询处理,你可以参考这个项目的swift https://github.com/MrAlek/PagedArray
答案 1 :(得分:0)
你完全没问题,没有一点担心。 UITableViewDelegate
和UITableViewDataSource
已经是这些任务的超级高效协议。让我解释一下:
无论您从API中获得300或10,000件物品,只要它是唯一的文字,延迟就不会下降(只有文字回复?&# 39;在带宽中占据足够的空间)。为什么是这样?因为UITableViewDelegate
已经为您组织了它们的显示。您不会一次显示所有300个项目,而是按照需求回收单元格并显示它们(当用户滚动时)。这是tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
的唯一目的。当然,您需要至少有一个寄存器单元,并在上述方法中使用tableView.dequeueReusableCell
。
至于你的imagePaths下载,这是事情变得有趣的地方。您可以通过多种方法实现这一目标,Apple最近甚至添加了一个名为UIPrefetchDataSource
的新代理,它可以让您更好地控制用户滚动时可能显示的单元格,以便您可以进行设置提前。然而,即使你决定采用更简单的方法,你仍然需要处理并发 - 用户不会在30-45秒内静止盯着你的屏幕等待图像显示以便继续滚动(像 Instagram 这样的应用程序将无法使用) - 。我强烈建议您通过article来解决所有这些问题。{/ p>