numberOfRows
будет вызываться для каждого раздела, поэтому вам необходимо вернуть правильное значение на основе текущего раздела:
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == 0 ? apples.count : oranges.count
}
Вам нужен аналогичный шаблон в cellForRowAt
и во всех других методах источника данных / делегата:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", indexPath: indexPath
if indexPath.section == 0 {
cell.titleLabel.text = apples[indexPath.row]
} else {
cell.titleLabel.text = oranges[indexPath.row]
}
return cell
}
Это упрощено и делает много предположений, но дает правильное представление.
Для заголовков вам необходимо:
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section]
}
В этом ответе также предполагается, что у вас есть только два раздела, основанные на двух переменных массива. Это далеко от идеала. Вы действительно должны иметь единую структуру данных со всей правильной структурой. Тогда не нужно делать никаких предположений. Вы можете добавить больше разделов и строк, и вам не нужно изменять код табличного представления.