Created
October 11, 2019 05:27
-
-
Save strzempa/a294d2c3e6795f0d2ce5980bf0de38ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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