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

Swift中如何通过UIButton点击动作递增计数遍历数组与Firestore文档

实现方案

首先在你的视图控制器类中添加两个成员属性,用来缓存Firestore查询结果和记录当前遍历的下标:

// 缓存查询到的所有符合条件的文档
var mentorDocuments: [QueryDocumentSnapshot] = []
// 当前遍历到的下标
var currentIndex = 0

然后修改你的queryMethod方法,将查询到的文档存入缓存数组,你可以在viewDidLoad生命周期方法中调用该方法拉取一次数据即可,无需重复发起查询:

func queryMethod(){
  let typeRef = Global.db.collection("userData")
  let query = typeRef.whereField("type", isEqualTo: "Mentor")

  query.getDocuments { [weak self] querySnapshot, err in
      guard let self = self else { return }
      if let err = err {
          print("Error getting documents: \(err)")
      } else if let documents = querySnapshot?.documents {
          // 把查询结果存入缓存数组
          self.mentorDocuments = documents
          // 可选:初始化后默认加载第一个文档
          self.currentIndex = 0
          if let firstDoc = documents.first {
              print("\(firstDoc.documentID) => \(firstDoc.data())")
              // 这里写你需要的第一个文档的处理逻辑
          }
      }
  }
}

最后实现按钮绑定的IBAction方法,每次点击时递增下标、取出对应文档处理:

@IBAction func nextButtonTapped(_ sender: UIButton) {
    // 避免下标越界
    guard currentIndex < mentorDocuments.count - 1 else {
        // 已经遍历到最后一个文档,你可以在这里做提示,或者重置下标实现循环遍历
        print("已经到最后一份文档了")
        // 如果需要循环遍历,打开下面这行注释即可
        // currentIndex = 0
        return
    }
    // 下标+1
    currentIndex += 1
    // 取出当前对应文档
    let currentDoc = mentorDocuments[currentIndex]
    print("\(currentDoc.documentID) => \(currentDoc.data())")
    // 这里写你需要的文档处理逻辑
}

注意事项

  • 避免每次点击按钮都发起Firestore查询,重复查询会消耗请求配额还会导致响应卡顿,仅在页面初始化、或者需要刷新数据时调用queryMethod即可
  • 所有可选值都做了安全判断,不要使用!强行解包,避免空值崩溃
  • 如果需要支持向前遍历,再加一个按钮,点击时判断currentIndex > 0之后将下标减1即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:04