Skip to content

Instantly share code, notes, and snippets.

@abdulowork
Last active December 27, 2016 23:17
Show Gist options
  • Save abdulowork/0ae0eee36fa1958fc53e5812c3a69e18 to your computer and use it in GitHub Desktop.
Save abdulowork/0ae0eee36fa1958fc53e5812c3a69e18 to your computer and use it in GitHub Desktop.

Моя имлементация 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ов которые к тому же могут быть переиспользованы в других табличных интерфейсах.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment