It would be nice to get away with declaring a constant for every reuse identifier of cells in our app: with this common approach is very easy to make mistakes (and clearly it does not fits in a Swift world).

I’ve used this approach to simplify my everyday work both with UITableView  and UICollectionView ; from this work I’ve created Flow, a new approach to manage UITableView.
▶︎ Check it now! it will save you tons of code!

We can just use the name of the custom cell class as a default reuse identifier.
First of all we can create a ReusableViewProtocol  which is responsible to provide the identifier of cell.

By making UITableViewCell  conform to the DequeuableProtocol  protocol, we get a unique reuse identifier per cell subclass.
Generally you don’t need to provide implementation of dequeueIdentifier ; default implementation return the same name of the class (also with module name prefix).
Another property is dequeueNibName : if your cell is defined inside a bundle (and not as prototype cell inside storyboard) you can register it to the table and use it (even this method has its own default implementation).

The final part of this trick is to provide registration and dequeue function inside the table (keep in mind: you can apply the same technique even with UICollectionView!)

Now if your cell is defined inside a storyboard you can simply call:

While if your cell is inside an external xib:

With this approach you can get your strongly typed instance of the cell easily.
The whole code is available here.
But it’s not enough… the best part is yet to come!