【问题标题】:How does the Twitter app count impressions?Twitter 应用程序如何计算展示次数?
【发布时间】:2019-05-17 04:23:16
【问题描述】:

因此,对于每条推文,Twitter 都会计算其展示次数,即它出现在多少屏幕上。无需交互即可计算展示次数,只需显示推文即可。

如果 Twitter 提要是 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 重新加载时,每个单元格可能会多次调用此方法,这将导致添加多个展示而不是仅添加一个展示。

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

谢谢。

【问题讨论】:

    标签: ios swift uitableview twitter tableview


    【解决方案1】:

    假设您的推文结构(带有 hasSeen 布尔值)如下所示:

    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
    }
    

    对于每条推文,您检查该推文之前是否显示过。如果未显示,则添加展示,如果已显示,则不添加。

    这是我想尝试的一种方法。让我知道这是否适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 2018-08-07
      • 2021-12-26
      • 2015-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多