我正在学习如何利用表格视图和表格视图单元格,今天我想练习在表格视图中使用节。设置节标题并将数据分类到这些特定节中非常容易,尤其是在使用枚举时。
为了使其更具挑战性,我想看看将基于团队名称的部分标题存储在Firebase上并使行由属于该特定团队的用户组成将是多么困难。我已经意识到,对于仍在学习Swift的人来说,这是极其困难的。
此处显示了该结构在Firebase上的外观:
用户可以创建自己的团队名称,这些团队名称将用作标题。因此,我要做的是创建一个字符串数组,观察团队名称并将其添加到该数组中。从那里,我将各部分的标题设置为每个团队的名称。 我遇到的问题是将正确的用户归入每个团队。
如果有40个团队,我可以轻松地创建40个标题正确的部分,但似乎无法弄清楚如何将每个用户分类为正确的部分。
答案 0 :(得分:1)
这是您问题的简单实现。您有一个播放器类,它是您的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
< / p>
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
}