You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore添加当前用户过滤逻辑后函数异常退出,未向数组添加用户

解决Firestore获取用户时过滤当前用户的问题

嘿,我明白你遇到的问题了——你想在获取用户列表时跳过当前登录用户,但用return直接导致整个函数提前退出,根本没机会添加其他用户对吧?

问题根源

你在for循环里写的if user.uid == uid {return},这里的return会直接终止整个getDocuments的回调闭包,而不是仅仅跳过当前这一次循环迭代。也就是说,只要遇到第一个匹配当前用户的文档,整个回调就结束了,后面的用户都不会被处理,自然users数组就空了。

解决方案1:用continue跳过当前用户

把return换成continue,这样只会跳过当前的循环项,继续处理下一个用户文档:

func fireStoreFetchUsers(){
 guard let uid = Auth.auth().currentUser?.uid else { return }
 let db = Firestore.firestore()
 db.collection("Users")
 .getDocuments() { (querySnapshot, err) in
 if let err = err {
 print("Error getting documents: \(err)")
 } else {
 // 先清空数组,防止重复加载数据
 self.users.removeAll()
 for document in querySnapshot!.documents {
 let dictionary = document.data()
 let user = User2(uid: "", distanceFrom: "any", dictionary: dictionary)
 if user.uid == uid {
 // 跳过当前登录用户,继续处理下一个
 continue
 }
 self.users.append(user)
 }
 // 所有用户处理完后再刷新UI,避免多次重复刷新
 self.collectionView?.reloadData()
 }
 }
}

更高效的解决方案:在Firestore查询时直接过滤

其实我们可以让Firestore服务器直接返回排除当前用户的数据,不用把所有用户都拉到客户端再过滤,这样更节省带宽和客户端资源:

func fireStoreFetchUsers(){
 guard let uid = Auth.auth().currentUser?.uid else { return }
 let db = Firestore.firestore()
 db.collection("Users")
 // 直接在查询阶段排除当前用户的文档
 .whereField("uid", isNotEqualTo: uid)
 .getDocuments() { (querySnapshot, err) in
 if let err = err {
 print("Error getting documents: \(err)")
 } else {
 self.users.removeAll()
 for document in querySnapshot!.documents {
 let dictionary = document.data()
 let user = User2(uid: "", distanceFrom: "any", dictionary: dictionary)
 self.users.append(user)
 }
 self.collectionView?.reloadData()
 }
 }
}

额外小提示

  1. 记得在加载数据前清空users数组,避免每次调用函数都重复添加旧数据;
  2. 把collectionView?.reloadData()放在循环外面,不要每次添加一个用户就刷新一次,这样能提升UI性能;
  3. 确保你的User2初始化方法正确解析了dictionary里的uid字段,不然判断逻辑会失效哦。

内容的提问来源于stack exchange,提问作者user9043410

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:27:32