因此,对于每条推文,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
重新加载时,可能会为每个单元多次调用此方法,这将导致添加多个印象而不是一个。
我想可能使这项工作起作用的是一个代码块,每个单元只能运行一次。有这样的事吗?
谢谢。
答案 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
}
对于每条推文,您都检查该推文是否显示过。如果未显示,则添加印象,如果没有,则添加印象。
这是我想尝试的一种方法。让我知道这是否对您有用。