【发布时间】:2020-10-29 21:43:13
【问题描述】:
我有一个基于视频的应用程序。有人建议我使用类似于任何其他视频应用程序的视频推荐系统,该系统根据用户观看的内容显示视频。如果用户滚动浏览 50 个视频,其中 20 个与宠物相关(狗、猫等),那么随着用户进一步滚动,他们会看到更多与动物相关的视频,而不是与动物无关的视频。
当我拉帖子时,我会根据快照键从最新到最旧进行分页。每个视频都有一个类似-category: "pets" 的属性,但这与分页的快照键无关。在确定用户更喜欢宠物视频后,我认为是用户页面,如果帖子不包含该属性,请跳过它,但有一个问题。
使用属性的问题是,如果前 50 个视频确定用户更喜欢与宠物相关的视频,因为他们滚动接下来的 200 个视频可能没有宠物属性,这意味着要么跳过所有 200 个视频,要么显示商场。但是如果他们必须滚动浏览所有 200 个,那么推荐系统就没有任何意义了。
如果200之后的50个视频中有10个确实有pets属性,使用下面的分页系统,没有办法跳过所有200个视频并到达后面50个中的下10个(基本上直接跳到keys 201 - 250)。
是否有跳过不包含特定属性的帖子批次?
var snapKey: String?
func paginate() {
let postsRef = Database.database().reference().child("posts")
if snapKey == nil {
postsRef
.queryOrderedByKey
.queryLimited(toLast: 20)
.obsereSingleEvent(of: value, with: (snapshot) {
guard let firstChild = snapshot.children.allObjects.first as? DataSnapshot else { return }
for child in snapshot.children.allObjects as! [DataSnapshot] {
// each child is a post, get it, fetch and attach user model, append to datasource, reloadData
}
self.snapKey = firstChild.key
})
} else {
postsRef
.queryOrderedByKey
.queryEnding(atValue: snapKey!)
.queryLimited(toLast: 21)
.obsereSingleEvent(of: value, with: (snapshot) {
guard let firstChild = snapshot.children.allObjects.first as? DataSnapshot else { return }
for child in snapshot.children.allObjects as! [DataSnapshot] {
// each child is a post, get it, fetch and attach user model, append to datasource, reloadData
}
self.snapKey = firstChild.key
})
}
}
【问题讨论】:
-
请编辑问题以将其缩小到一个特定的问题或问题。您在这里至少有三个不同的问题(包括标题中的一个),其中一个与 Stack Overflow 完全无关。
-
哪一部分是题外话,所以我可以删除它。
-
标题 - 询问 RTDB 是否合适。这是一个见仁见智的问题。要求其他更合适的问题是题外话,因为它要求对场外资源提出建议。将您的问题集中在手头代码的功能上。
-
我更新了问题但保持上下文不变
标签: ios swift firebase-realtime-database