UITableView+Identifiable.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //
  2. // UITableView+Identifiable.swift
  3. // Bio
  4. //
  5. // Created by Joan Disho on 22.07.18.
  6. // Copyright © 2018 Joan Disho. All rights reserved.
  7. //
  8. import UIKit
  9. extension UITableView {
  10. func register<T: UITableViewCell>(cellType: T.Type) where T: ClassIdentifiable {
  11. register(cellType.self, forCellReuseIdentifier: cellType.reuseId)
  12. }
  13. func register<T: UITableViewCell>(cellType: T.Type) where T: NibIdentifiable & ClassIdentifiable {
  14. register(cellType.nib, forCellReuseIdentifier: cellType.reuseId)
  15. }
  16. func registerHeaderFooter<T: UITableViewHeaderFooterView>(viewType: T.Type) where T: ClassIdentifiable {
  17. register(viewType.self, forHeaderFooterViewReuseIdentifier: viewType.reuseId)
  18. }
  19. func registerHeaderFooter<T: UITableViewHeaderFooterView>(viewType: T.Type) where T: NibIdentifiable & ClassIdentifiable {
  20. register(viewType.nib, forHeaderFooterViewReuseIdentifier: viewType.reuseId)
  21. }
  22. func dequeueReusableCell<T: UITableViewCell>(withCellType type: T.Type = T.self) -> T where T: ClassIdentifiable {
  23. guard let cell = dequeueReusableCell(withIdentifier: type.reuseId) as? T
  24. else { fatalError("Couldn't dequeue a UITableViewCell with identifier: \(type.reuseId)") }
  25. return cell
  26. }
  27. func dequeueResuableCell<T: UITableViewCell>(withCellType type: T.Type = T.self, forIndexPath indexPath: IndexPath) -> T where T: ClassIdentifiable {
  28. guard let cell = dequeueReusableCell(withIdentifier: type.reuseId, for: indexPath) as? T
  29. else { fatalError("Couldn't dequeue a UITableViewCell with identifier: \(type.reuseId)") }
  30. return cell
  31. }
  32. func dequeueResuableHeaderFooterView<T: UITableViewHeaderFooterView>(withViewType type: T.Type) -> T where T: ClassIdentifiable {
  33. guard let headerFooterView = self.dequeueReusableHeaderFooterView(withIdentifier: type.reuseId) as? T
  34. else { fatalError("Couldn't dequeue a UITableViewHeaderFooterView with identifier: \(type.reuseId)") }
  35. return headerFooterView
  36. }
  37. }