我试图在每第n个(第3个)单元格中显示不同的单元格(Ad)。 像这样:
"Request"
"Request"
"Request"
"Ad"
"Request"
"Request"
"Request"
"Ad"
"Request"
"Request"
"Request"
"Ad"
"Request"
...
我的代码:
这些是我的变量
var requests = [RequestListable]()
var list = [Listable]()
var users = [UserInfo?]()
var adInterval = 3
这是我的功能,我正在尝试加载广告。问题是通常每个请求(requestsArray)都有一个关联用户(usersArray),当我将广告插入“listArray”时,用户不再与请求匹配。一点也不。 这就是为什么我在同一个索引处插入一个假冒用户,广告插入到该索引,但这不起作用。
我正在重新加载TableView的另一个函数,它取出了我的 请求
func loadAds()
{
Api.adApi.observeAds
{
(ad, user) in
self.list = self.requests
for i in stride(from: self.adInterval, to: self.requests.count, by: self.adInterval).reversed()
{
self.list.insert(ad, at: i)
self.users.insert(user, at: i) // This is probably where i'ts going wrong
print(self.users.count) // Returns 40 (Don't know why)
print(self.list.count) // Returns 13
}
}
}
这些是我的TableView函数
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return list.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let listing = list[indexPath.row]
if let request = listing as? RequestListable
{
let cell = tableView.dequeueReusableCell(withIdentifier: "RequestCell", for: indexPath) as! RequestTVCell
let user = users[indexPath.row]
cell.request = request
cell.user = user
cell.delegate = self
return cell
}
else if let ad = listing as? AdListable
{
let cell = tableView.dequeueReusableCell(withIdentifier: "AdCell", for: indexPath) as! AdTVCell
cell.ad = ad
cell.user = users[indexPath.row]
return cell
}
fatalError("Did not find data or ad for cell: Should never get here")
}
所以问题是:
之后,用户与其关联的请求不匹配 插入广告和用户
有什么建议吗?我真的很感激。
答案 0 :(得分:0)
看起来你有users
而不是requests
,因为你使用数组的索引来匹配user
和request
,这些都不匹配。您有一条评论'Returns 40 (Dont know why)
- 您应该弄清楚这一点并确保您的users
与requests
匹配。此外,您可能需要考虑更紧密地耦合users
和requests
。您可以为list
使用元组类型而不是将它们存储在单独的数组中,并添加一个方法以确保user
的{{1}}正确request
,然后您就会知道您对user
有正确的request
。
var list = [(UserInfo, Listable)]()
答案 1 :(得分:0)
每次执行observeAds闭包时,您都会使用self.requests的副本替换self.list,同时始终插入self.users。