0

我有一个使用枚举填充的分段控件。我有一个表格视图来显示每个案例的数据。处理这个用例而不是硬编码开关用例的正确方法是numberOfRowsInSection什么cellForRowAt

let segmentedControl = UISegmentedControl(items: SegmentedControlItems.allCases.map {$0.rawValue})

private enum SegmentedControlItems: String, CaseIterable {
    case case1 = "Case1"
    case case2 = "Case2"
    case case3 = "Case3"
}

private var arr1 = [Type1]()
private var arr2 = [Type2]()
private var arr3 = [Type3]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch view?.segmentedControl.selectedSegmentIndex {
    case 0:
        return case1.count
    case 1:
        return case2.count
    case 2:
        return case3.count
    default:
        return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: AssetView.AssetCell.reuseIdentifier, for: indexPath) as? AssetView.AssetCell else {
        fatalError("Error trying to dequeue cell")
    }

    switch view?.segmentedControl.selectedSegmentIndex {
    case 0:
        setupCell(case1)
    case 1:
        setupCell(case2)
    case 2:
        setupCell(case3)
    default:
        return UITableViewCell()
    }

    return cell
}
4

1 回答 1

0

case1, case2, 和case3放入一个数组中。让我们称之为cases

let cases = [case1, case2, case3]

然后使用分段控件的索引对其进行索引:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    guard let selectedItem = view?.segmentedControl.selectedSegmentIndex,
        selectedItem < cases.count else { fatalError("splat!" }
    return cases[selectedItem]
}
于 2022-03-05T12:15:14.633 回答