Я хочу создать UITableViewController, который принимает enum
в качестве источника данных.Дело в том, что у меня есть довольно много enums
, которые я хочу, чтобы он мог обрабатывать.
Я создал протокол с именем TableViewSelectable
и создал несколько enums
, которые соответствуют ему следующим образом:
protocol TableViewSelectable {
}
enum Genders: Int, TableViewSelectable {
case male = 0, female
static let allKeys = [male, female]
static let allNames = [male.getName, female.getName]
var getName: String {
switch self {
case .male:
return "Male"
case .female:
return "Female"
}
}
}
enum Goals: Int, TableViewSelectable {
case gainMuscleMass, getTrimFit, loseWeight
static let allKeys = [gainMuscleMass, getTrimFit, loseWeight]
static let allNames = [gainMuscleMass.getName, getTrimFit.getName, loseWeight.getName]
var getName: String {
switch self {
case .gainMuscleMass:
return "Gain muscle mass"
case .getTrimFit:
return "Get trim & fit"
case .loseWeight:
return "Lose weight"
}
}
}
И я создал переменную экземпляра на моем UITableViewController
примерно так:
class ChoiceListTableViewController: UITableViewController {
var data: TableViewSelectable?
}
Проблема в том, что я понятия не имею, как идти отсюда.То, что я хочу иметь, это возможность дать UITableViewController
любой enum
, который соответствует TableViewSelectable
, для использования в качестве источника данных.
Я хочу получить к нему доступ на UITableViewController
это:
final class ChoiceListTableViewController: UITableViewController {
var data: TableViewSelectable?
// MARK: Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
self.clearsSelectionOnViewWillAppear = false
}
}
// MARK: Table View Data Source & Delegate
extension ChoiceListTableViewController {
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.allKeys.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ChoiceTableViewCell", for: indexPath)
cell.textLabel?.text = data.allNames[indexPath.row]
return cell
}
}
Помогите пожалуйста?:)