Наверняка, если вы только недавно начали работать с UIKit или просто перешли к верстке кодом, то могли встретить ошибку
'required' initializer 'init(coder:)' must be provided by subclass of 'UIViewController'Эта ошибка обычно возникает при создании контроллеров с помощью кода (а не с XIB или, если кто-то использует до сих пор, storyboard).
Так почему это происходит?
Класс UIViewController соответствует протоколу NSCoding.
Поскольку мы создаём его программно, то должны также соответствовать его протоколу, который включает реализацию необходимого инициализатора, даже если мы не используем его напрямую.
На примере Storyboard: в рантайме UIStoryboard создает контроллер программно, кодируя его как раз с помощью протокола NSCoding.
Storyboard передает архив данных контроллера в метод init(coder:), который затем и использует эти данные для воссоздания состояния контроллера.
📖 Понятный и несложный разбор доступен в этой статье.
😃 iOS Dev
