连续追加数组元素



我从火碱查询,元素返回正确。但是,当我搜索两次时,会出现两个元素。这意味着两个元素被附加到数组中。应该是从搜索中返回的唯一一件事。如果我搜索两次,两个元素不应该存在。

if self.postsArray.count == 0
{
self.postsArray.append(newPost!)

self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}
}
else
{
for post in self.postsArray
{
if post.key == newPost?.key{
self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}
return
}
else
{
self.postsArray.append(newPost!)
//                            self.postsArray.sort(by: { (post1, post2) -> Bool in
//                                return post1.title.compare(post2.title) == .orderedAscending
//                            })
self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}
}
}
}

所以我问问是否有人可以看看这个,看看我的逻辑中的错误在哪里,它使事情不止一次地添加到过滤的事件数组中

我想问题出在 for 循环中,每当新帖子不相等时,您都会将新帖子附加到数组中,而它只应该附加一次

因此,您可以使用过滤器来查看它是否包含newPost

所以替换

for post in self.postsArray
{
if post.key == newPost?.key{
self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}
return
}
else
{
self.postsArray.append(newPost!)
//                            self.postsArray.sort(by: { (post1, post2) -> Bool in
//                                return post1.title.compare(post2.title) == .orderedAscending
//                            })
self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}
}

let filteredArr = self.postsArray.filter { (post) -> Bool in
return post.key == newPost?.key
}
if filteredArr.count == 0 {
//append
self.postsArray.append(newPost!)
} 

self.filteredPosts = self.postsArray.filter { (post) -> Bool in
return post.title.lowercased().contains(stringValue.lowercased())
}
DispatchQueue.main.async {
self.exploreCollectionView?.reloadData()
}

最新更新