Я бы сделал такой диктонар, как:
var userByOccupation: [String: [User]] = []
И затем создал бы функцию, в которой вы вставляете всех пользователей в этот диктонар, где ключ является их профессией (если у них больше 1, просто добавьте новый ключ).с тем же значением)
Так что я не знаю, как выглядит ваша модель данных до профессий, но вам нужно просто перебрать каждый дочерний элемент профессий, и для каждого дочернего элемента взять значение и сохранить это значение какключ и текущий пользователь в качестве значения в массиве userByOccupation.
Итак, сначала получите текущего пользователя, а затем:
ref?.child("Occupation").observeSingleEvent(of: .value, with: { (snapshot) in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? DataSnapshot{
if let occupation = rest.key as? String{
//And here insert OCCUPATION/USER like
if (userByOccupation[occupation] != nil) {
userByOccupation[occupation]?.append(user)
} else {
userByOccupation[occupation] = [user]
}
}
}
})
РЕДАКТИРОВАТЬ для комментария-вопроса:
ДонНе знаю, будет ли это лучшим решением, но вот как я это сделаю.После загрузки словаря просто создайте массив всех ключей, как этот
allOccupations = Array(userByOccupation.keys)
После этого вы можете заказать этот массив, например -> словари не упорядочены!
И затем:
override func numberOfSections(in tableView: UITableView) -> Int {
return allOccupations.count
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return allOccupations[section]
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return userByOccupation[allOccupations[section]].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Then get the user like this
guard let allUsers = userByOccupation[allOccupations[section]] else {
return }
let currentUser = allUsers[indexPath.row]
}
Сделал это довольно быстро, поэтому извините, если в нем есть ошибки, надеюсь, он вам поможет!