Я реализую UITableView
, который будет иметь несколько разделов. Количество разделов является динамическим. Вот некоторые свойства:
public struct User {
let userRole: UserRole
}
public enum UserRole: Int, CaseIterable {
case superUser, admin, recruiter
}
My UITableView
содержит массив users
. Количество разделов - это количество различных userRoles
в массиве users
. Позже мне нужно определить количество строк в каждом разделе с помощью этой функции:
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {}
Мне интересно, какой самый простой / быстрый способ вернуть количество строк в этом разделе. Представьте, что массив user
содержит 2 users
, один имеет userRole
superUser
, а другой recruiter
. Разделы - 0 и 1, хотя необработанные значения enum - 0 и 2.
Я понятия не имею, как правильно вернуть правильное количество строк в этом разделе. Это то, о чем я писал, но остановился, потому что, хотя я должен был найти лучший способ:
extension Array where Element: User {
func contains(userRole: UserRole) -> Bool {
return contains(where: { $0.userRole == userRole })
}
}
private func determineUserRoleForSection(section: Int) -> UserRole {
let containsSuperUser = users.contains(userRole: .superUser)
let containsAdmin = users.contains(userRole: .admin)
let containsRecruiter = users.contains(userRole: .recruiter)
switch section {
case 0:
if containsSuperUser {
return .superUser
}
if containsAdmin {
return .admin
}
if containsRecruiter {
return .recruiter
}
case 1:
// Repeat without superUser case
case 2:
default: fatalError()
}
}