Twitter应用如何计算展示次数?

时间:2018-12-16 16:54:04

标签: ios swift uitableview twitter tableview

因此,对于每条推文,Twitter都会计算其印象,即它出现在多少个屏幕上。无需互动即可计算印象,只需显示该推文即可。

如果Twitter feed是UITableView,而每条推文都是UITableViewCell,那么如何实现?

最初,我尝试像这样在tableView(_:cellForRowAt:)方法中添加印象:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath) as! TweetCell
    let tweet = feed[indexPath.row]

    cell.configure(with: tweet)
    addImpression(for: tweet) // adding impression here...

    return cell
}

但是当用户滚动经过或UITableView重新加载时,可能会为每个单元多次调用此方法,这将导致添加多个印象而不是一个。

我想可能使这项工作起作用的是一个代码块,每个单元只能运行一次。有这样的事吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

让我们说您具有如下的tweet结构(具有hasSeen bool值):

struct Tweet {
  var user: String
  var text: String
  var hasSeen: Bool
  var date: Date
  // and etc.
}

然后修改您的cellForRowAt方法,如下所示:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: "TweetCell", for: indexPath) as! TweetCell
  let tweet = feed[indexPath.row]

  if tweet.hasSeen == false {
    addImpression(for: tweet)
    tweet.hasSeen = true
  }

  cell.configure(with: tweet)

  return cell
}

对于每条推文,您都检查该推文是否显示过。如果未显示,则添加印象,如果没有,则添加印象。

这是我想尝试的一种方法。让我知道这是否对您有用。