Контроллеры представления, содержащие IBOutlet
s, являются контроллерами представления, которыми вы будете управлять в Интерфейсном Разработчике.С этим сталкиваются две проблемы:
Контроллер представления Interface Builder создается с использованием необходимого инициализатора init(coder:)
, который не может создавать экземпляры универсальных объектов, поскольку у него нет контекста.в котором он знает, что T
должно быть во время выполнения.
Когда вы создаете экземпляр AViewController
в коде, вы будете указывать конкретный тип
let aVC = AViewController<String>()
но вы не можете сделать это в Identity Inspector в IB.Это недопустимо:
То, что вы можете сделать, это создать специальный контроллер представления раскадровки, который наследуется от вашего универсального контроллера представления, но указывает конкретный тип
class AStringViewController: AViewController<String> {
}
И используйте AStringViewController
в IB в инспекторе удостоверений и подключите розетки, как требуется.
Если вы обнаружите, что это не совсем то, что вам нужно, и ваш контроллер представлениядолжен быть более динамичным, чем вы должны будете создать свой контроллер представления в коде, и вы не сможете использовать розетки.
Другая альтернатива - иметь не универсальный контроллер представления с вашими розетками и использовать дочернее представлениеконтроллеры, созданные в коде и имеющие необходимые вам дженерики.