ios - 根据来自后端的数据为 UITableView 中的部分设置数据源

标签 ios swift uitableview

我正在学习如何使用表格 View 和表格 View 单元格,今天我想练习使用表格 View 中的部分。设置部分标题并将数据分类到这些特定部分相当容易,尤其是在使用枚举时。

为了让它更具挑战性,我想看看将基于团队名称的部分标题存储在 Firebase 上并让行由属于该特定团队的用户组成会有多困难。我开始意识到这对于仍在学习 Swift 的人来说是极其困难的。

这是该结构在 Firebase 上的样子:

enter image description here

用户可以创建自己的团队名称,这些团队名称将作为标题。所以我所做的是创建一个字符串数组,观察团队名称并将它们添加到数组中。从那里,我将各部分的标题设置为每个团队名称。 我遇到的问题是将正确的用户置于每个团队之下。

如果有 40 个团队,我可以轻松地创建 40 个标题正确的部分,但我似乎无法弄清楚如何将每个用户分类到正确的部分。

最佳答案

这是您问题的简单实现。您有一个播放器类,它是您的 Firebase 数据。

class Player {
    var name: String
    var teamName: String

    init(name: String, teamName: String) {
        self.name = name
        self.teamName = teamName
    }
}

创建一个 Team 类来存储您的部分数据。

class Team {
    var teamName: String
    var players: [Player]

    init(teamName: String, players: [Player]) {
        self.teamName = teamName
        self.players = players
    }
}

从 Firebase 获取数据后,将所有玩家存储在数组 players 中。现在你可以有一个方法返回一个数组,该数组包含 Team 对象,该对象具有 teamNameplayers,这是一个包含过滤的球员的数组共享相同的 teamName

func getTeams() -> [Team] {
    var teams: [Team] = []
    while !players.isEmpty {
        guard let referencePlayer = players.first else {
            print("All players sorted.")
            return []
        }
        let filteredPlayers = players.filter { (player) -> Bool in
            return player.teamName == referencePlayer.teamName
        }
        players.removeAll { (player) -> Bool in
            return player.teamName == referencePlayer.teamName
        }
        let team = Team(teamName: referencePlayer.teamName, players: filteredPlayers)
        teams.append(team)
    }
    return teams
}

现在在 viewDidLoad 中调用此方法并重新加载表格。

func numberOfSections(in tableView: UITableView) -> Int {
    return teams.count
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return teams[section].players.count
}

关于ios - 根据来自后端的数据为 UITableView 中的部分设置数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51845172/

相关文章:

ios - 日期时间格式化程序崩溃

ios - 无法识别的选择器发送到实例日期选择器 - swift

ios - 可能的竞争条件? Swift 2 iOS 应用程序随机不调用 func tableView(tableView

swift - Swift 2 中具有异步图像的动态单元高度

ios - 任何获取iOS系统默认主题颜色的方法

ios - 在启动时显示模式登录 - 通过 UITableView

ios - 注释引脚作为用户位置

ios - 将快照字典从 firebase 数据库保存到类对象

ios - 将数据从 ViewController 传递到 Representable SwiftUI

ios - 没有导航 Controller 的 pushViewController