我正在实现一个包含多个部分的 UITableView
。部分的数量是动态的。这是一些属性:
public struct User {
let userRole: UserRole
}
public enum UserRole: Int, CaseIterable {
case superUser, admin, recruiter
}
我的 UITableView
包含一个 users
数组。部分的数量是 users
数组中不同的 userRoles
的数量。稍后,我需要使用此函数确定每个部分中有多少行:
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {}
我想知道返回该部分中行数的最干净/最快的方法是什么。假设 user
数组包含 2 个 users
,其中一个具有 superUser
的 userRole
,另一个 recruiter
。这些部分是 0 和 1,尽管枚举原始值是 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()
}
}
最佳答案
按照拥有模型的建议,您可以执行以下操作:
public struct UsersViewModel {
var users: [User]
private var sections: [UserRole: [User]] {
return [
.admin : users.filter { $0.userRole == .admin },
.superUser : users.filter { $0.userRole == .superUser },
.recruiter : users.filter { $0.userRole == .recruiter }
]
}
var superUserSections: Int { return sections[.superUser]!.count}
var adminSections: Int { return sections[.admin]!.count }
var recruiterSections: Int { return sections[.recruiter]!.count }
}
然后就是使用的问题了:
public func tableView(_ tableView: UITableView, numberOfSections section: Int) -> Int {
return 3 // section 0 is superUser, section 1 is admin, section 2 is recruiter.
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return viewModel.superUserSections
case 1:
return viewModel.adminSections
case 2:
return viewModel.recruiterSections
}
}
关于swift - 用部分确定枚举大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250914/