TestsTested | ✗ |
LangLanguage | SwiftSwift |
License | MIT |
ReleasedLast Release | Feb 2017 |
SwiftSwift Version | 3.0 |
SPMSupports SPM | ✗ |
Maintained by Shaps.
Swift is great, but sometimes working with UIKit can be less safe than hanging off the edge of a cliff without a net.
My cell provider implementation ticks off the following:
I actually wrote this code a long time ago for another library of mine, Populate.
Populate also includes a more consistent API for dealing with data in your table/collection views. Including type-safety, NSFetchedResultsController-like bindings via a simple Swift array, value-types support, sectioning, sorting, and more.
// First register your cell
tableView.register(cellClass: PersonCell.self)
// Then dequeue with a type-safe function
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let person = people[indexPath.item]
if person.role == "Engineer" {
let cell = tableView.dequeueReusableCell(ofType: PersonCell.self, for: indexPath)
cell.textLabel?.text = person.name
cell.detailTextLabel?.text = person.role
return cell
} else {
let cell = tableView.dequeueReusableCell(with: "SubtitleCell", for: indexPath) as UITableViewCell
cell.textLabel?.text = person.name
cell.detailTextLabel?.text = person.role
return cell
}
}
The key to implementing multiple type-safe cell handling, is the ResuableView
and ReusableViewHosting
protocol extensions. It automatically handles all the registration/dequeueing for you – and all without stringly typed identifiers.
This repo includes a simple sample project for your convenience, however in order to use the code, you simply need to copy CellProvider.swift
into your project.
Alternatively you can grab the code from GIST, ReusableView.swift
The following platforms and version have been tested:
All code is available under the MIT license.