我正在嘗試按作業層次結構對我的陣列進行排序。
例如我有模型:
struct Employee{
let name: String
let job: String
let phone: String
let mail: Sting
}
然后我有員工
class EmployeeViewModel: ObservableObject{
@Published var employees: [Employee] = [
Employee(name: "John", job: "Manager", age: 32),
Employee(name: "Anna", job: "CEO", age: 40),
Employee(name: "Julia", job: "Junior Developer", age: 25),
Employee(name: "Kevin", job: "Senior Developer", age: 29)
]
}
我想像這樣將它們排序到串列中:
CEO Anna
Manager John
Kevin Senior Developer
Julia Junior Developer
有什么簡便的方法嗎?
uj5u.com熱心網友回復:
你的Employee結構和你的EmployeeViewModel.employees不匹配,所以我改變Employee了。為了使其可排序,Employee必須符合Comparable協議。由于您想要一個固定的作業訂單,最簡單的方法是使用 anenum對它們進行排名。此外,Employee應符合Identifiable協議以將它們ForEach用于顯示目的。你可以作弊,但最終你需要遵守,所以從一開始就養成習慣。
struct SortByJob: View {
@StateObject var employeeVM = EmployeeViewModel()
var body: some View {
List {
ForEach(employeeVM.employees.sorted()) { employee in
HStack(spacing: 5) {
Text(employee.job.description)
Text(employee.name)
}
}
}
}
}
struct Employee: Identifiable, Comparable {
let id = UUID()
let name: String
let job: Job
let age: Int
static func < (lhs: Employee, rhs: Employee) -> Bool {
lhs.job.rawValue < rhs.job.rawValue
}
}
enum Job: Int {
case ceo = 1
case manager = 2
case seniorDeveloper = 3
case juniorDeveloper = 4
// This allows you to return a String from the enum for display purposes.
var description: String {
switch self {
case .ceo:
return "CEO"
case .manager:
return "Manager"
case .seniorDeveloper:
return "Senior Developer"
case .juniorDeveloper:
return "Junior Developer"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/402456.html
標籤:
上一篇:如何定位串列視圖
下一篇:QmlListView重疊
