According to the documentation, you actually can load a nib based view controller without naming it exactly the same thing. Although matching names is the most common way to do this, there’s a second case, which should work even with Swift.
From the documentation:
If you use a nib file to store your view controller’s view, it is
recommended that you specify that nib file explicitly when
initializing your view controller.However, if you do not specify a
nib name, and do not override the loadView method in your custom
subclass, the view controller searches for a nib file using other
means. Specifically, it looks for a nib file with an appropriate name
(without the .nib extension) and loads that nib file whenever its view
is requested. Specifically, it looks (in order) for a nib file with
one of the following names:
If the view controller class name ends with the word ‘Controller’, as in MyViewController, it looks for a nib file whose name matches the
class name without the word ‘Controller’, as in MyView.nib.It looks for a nib file whose name matches the name of the view controller class. For example, if the class name is MyViewController,
it looks for a MyViewController.nib file.
1
solved How to load a View Controller SubClass with a nib without specifying the nib name as a string?