Nice series, looking forward to complete it since in the job, we are also using Core Data for our app (Loop - email messenger).
I'd like to point out, that it is almost necessary to mark our delegate property as a weak (Inside CreateCompanyController - weak var delegate : CreateCompanyControllerDelegate?) so we avoid possible memory leak. This means, relationship between CreateCompanyController and CompaniesController is freed, in our case, when CreateCompanyController dismisses.
In case you want to mark delegate as a weak, you should also constraint CreateCompanyControllerDelegate to a class, since classes are reference types (protocol CreateCompanyControllerDelegate: class).
Hope this helps you :)