weareopensource/Swift

View on GitHub
waosSwift/lib/helpers/Libs/ReusableKit/UITableView+ReusableKit.swift

Summary

Maintainability
A
0 mins
Test Coverage
#if os(iOS)
import UIKit

extension UITableViewCell: CellType {
}

extension UITableView {

    // MARK: Cell
    /// Registers a generic cell for use in creating new table cells.
    public func register<Cell>(_ cell: ReusableCell<Cell>) {
        if let nib = cell.nib {
            self.register(nib, forCellReuseIdentifier: cell.identifier)
        } else {
            self.register(Cell.self, forCellReuseIdentifier: cell.identifier)
        }
    }

    /// Returns a generic reusable cell located by its identifier.
    public func dequeue<Cell>(_ cell: ReusableCell<Cell>) -> Cell? {
        return self.dequeueReusableCell(withIdentifier: cell.identifier) as? Cell
    }

    /// Returns a generic reusable cell located by its identifier.
    public func dequeue<Cell>(_ cell: ReusableCell<Cell>, for indexPath: IndexPath) -> Cell {
        return self.dequeueReusableCell(withIdentifier: cell.identifier, for: indexPath) as! Cell
    }

    // MARK: View
    /// Registers a generic view for use in creating new table header or footer views.
    public func register<View>(_ cell: ReusableView<View>) {
        if let nib = cell.nib {
            self.register(nib, forHeaderFooterViewReuseIdentifier: cell.identifier)
        } else {
            self.register(View.self, forHeaderFooterViewReuseIdentifier: cell.identifier)
        }
    }

    /// Returns a generic reusable header of footer view located by its identifier.
    public func dequeue<View>(_ view: ReusableView<View>) -> View? {
        return self.dequeueReusableHeaderFooterView(withIdentifier: view.identifier) as? View
    }
}
#endif