Моя имлементация builder выглядела следующим образом:
import UIKit
class AnyCellBuilder<C> where C: UITableViewCell {
typealias Cell = C
var tableView: UITableView!
var indexPath: IndexPath!
var model: Item!
var cellName: String!
required init() { }
func build() -> C {
return C()
}
}
Затем в TableViewController
func builder(at indexPath: IndexPath) -> AnyCellBuilder<UITableViewCell> {
switch indexPath.section {
case 0:
//MARK: - Top Section
switch indexPath.row {
case 0:
return ItemImageCellBuilder()
case 1:
return PriceAndCounterCellBuilder()
case 2:
return BonusAndFreshnessCellBuilder()
case 3:
return SuplimentInformationCellBuilder()
default:
fatalError()
}
//и т.д.
и сам cellForRow
let builder: AnyCellBuilder<UITableViewCell>
builder = self.builder(at: indexPath)
builder.tableView = tableView
builder.indexPath = indexPath
builder.model = item
return builder.build()
Конечно это не совсем builder pattern, так как тут нет directorа, не совсем уместное использование genericов, builderы производят ячейки вместо view, но таким образом я более или менее разбил логику собирания табличного интерфейса на несколько builderов которые к тому же могут быть переиспользованы в других табличных интерфейсах.