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

Swift 合并Firebase同步数组并排序填充UITableView问题求助

核心实现思路

将三个下标对应的关联属性打包为独立的单条数据模型,排序时整条数据同步移动,不会破坏对应关系。


实现步骤

1. 定义单条赛事数据结构体

// 单条赛事记录模型,包含所有关联属性
struct SportEvent {
    let name: String
    let timeString: String
    let date: Timestamp
}

2. 新增表格数据源属性

在你的ViewController中新增合并后的数据存储数组,表格直接基于该数组渲染:

var eventList: [SportEvent] = []

3. 实现数组合并方法arrayMasher

func arrayMasher() {
    // 安全取值,同时校验三个数组长度一致,避免下标越界
    guard let record = rSelectedRecord.first,
          let timeArray = record.rSyncTimeStringArray,
          let dateArray = record.rSyncDateArray,
          let nameArray = record.rSyncEventNameArray,
          timeArray.count == dateArray.count,
          dateArray.count == nameArray.count else {
        return
    }
    // 打包关联数据
    eventList.removeAll()
    for i in 0..<timeArray.count {
        let event = SportEvent(
            name: nameArray[i],
            timeString: timeArray[i],
            date: dateArray[i]
        )
        eventList.append(event)
    }
    // 首次加载默认排序
    sortEvents(by: 0)
    resultsTable.reloadData()
}

4. 实现分段控制排序逻辑

// 分段控制值变化时触发,需要在Storyboard中关联分段控制的valueChanged事件
@IBAction func segmentValueChanged(_ sender: UISegmentedControl) {
    sortEvents(by: sender.selectedSegmentIndex)
    resultsTable.reloadData()
}

// 按分段选中项执行不同排序规则
func sortEvents(by segmentIndex: Int) {
    switch segmentIndex {
    case 0:
        // 示例规则1:按时间正序排列(时间早的在前)
        eventList.sort { $0.date.seconds < $1.date.seconds }
    case 1:
        // 示例规则2:按时间倒序排列(时间晚的在前)
        eventList.sort { $0.date.seconds > $1.date.seconds }
    default:
        break
    }
}

5. 修改TableView数据源方法

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return eventList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "rCell", for: indexPath) as! ResultTableViewCell
    let currentEvent = eventList[indexPath.row]
    cell.rEvent.text = currentEvent.name
    cell.rEventTime.text = currentEvent.timeString
    return cell
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:15:03