我正在学习如何使用表格 View 和表格 View 单元格,今天我想练习使用表格 View 中的部分。设置部分标题并将数据分类到这些特定部分相当容易,尤其是在使用枚举时。
为了让它更具挑战性,我想看看将基于团队名称的部分标题存储在 Firebase 上并让行由属于该特定团队的用户组成会有多困难。我开始意识到这对于仍在学习 Swift 的人来说是极其困难的。
这是该结构在 Firebase 上的样子:
用户可以创建自己的团队名称,这些团队名称将作为标题。所以我所做的是创建一个字符串数组,观察团队名称并将它们添加到数组中。从那里,我将各部分的标题设置为每个团队名称。 我遇到的问题是将正确的用户置于每个团队之下。
如果有 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
对象,该对象具有 teamName
和 players
,这是一个包含过滤的球员的数组共享相同的 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/