Оборачиваем эти контроллеры в отдельный объект (кложур как вариант) и по тапу на соответствующую ячейку обрабатываем его.
UPD. Пример:
struct Row {
let title: String
let generator: (Parameters) -> UIViewController
}
let section: [Row] = [
Row(title: "first", generator: { (parameters) -> UIViewController in
return FirstViewController()
}),
Row(title: "second", generator: { (parameters) -> UIViewController in
return SecondViewController()
})
]
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let row = section[indexPath.row]
let vc = row.generator(Parameters)
navigationController?.pushViewController(vc, animated: true)
}