Skip to content

Instantly share code, notes, and snippets.

@strzempa
Created October 11, 2019 05:27
Show Gist options
  • Save strzempa/a294d2c3e6795f0d2ce5980bf0de38ff to your computer and use it in GitHub Desktop.
Save strzempa/a294d2c3e6795f0d2ce5980bf0de38ff to your computer and use it in GitHub Desktop.
import UIKit
public protocol UITableViewHeaderFooterViewIdentifiable: UITableViewHeaderFooterView {
static var identifier: String { get }
}
public extension UITableViewHeaderFooterViewIdentifiable where Self: UITableViewHeaderFooterView {
static var identifier: String {
return String(describing: self)
}
}
public protocol UITableViewCellIdentifiable: UITableViewCell {
static var identifier: String { get }
}
public extension UITableViewCellIdentifiable where Self: UITableViewCell {
static var identifier: String {
return String(describing: self)
}
}
public extension UITableView {
func register(_ elements: [UIView.Type]) {
elements.forEach { element in
switch element {
case is UITableViewCellIdentifiable.Type:
guard let cell = element as? UITableViewCellIdentifiable.Type else {
assertionFailure("failed registering element \(element)")
return
}
self.register(cell.self, forCellReuseIdentifier: cell.identifier)
self.register(UINib(nibName: cell.identifier, bundle: nil), forCellReuseIdentifier: cell.identifier)
case is UITableViewHeaderFooterViewIdentifiable.Type:
guard let cell = element as? UITableViewHeaderFooterViewIdentifiable.Type else {
assertionFailure("failed registering element \(element)")
return
}
self.register(cell.self, forHeaderFooterViewReuseIdentifier: cell.identifier)
self.register(UINib(nibName: cell.identifier, bundle: nil), forHeaderFooterViewReuseIdentifier: cell.identifier)
default:
break
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment