TL; DRСоздать массив объектов, который реализует конкретный протокол
Я ищу типа массива (var array = [TheTypeImLookingFor]()
), как «все объекты, которые подклассы UIViewController
и реализует протокол MyProtocol
.
Объяснение
Я строю вид зрения мастера с точки зрения контейнера и встроенными представлениями ребенка (контроллер). Нет проблем, это будет работать так долго, поскольку у меня есть только один тип контроллеров дочерних представлений base
.
Благодаря содержанию экранов, у меня сейчас куча зрения контроллеров типа MyTableViewController
, который является подклассом UITableViewController
и другие контроллеры имеют вид, что регулярные UIViewControllers
в качестве основы.
Все контроллеры вида имеют одну общую черту. Свойство данных по умолчанию myData: MyObject
.
Я создал протокол MyProtocol
, который содержит это свойство.
Теперь я должен объединить все эти контроллеры представлений в один массив, чтобы использовать его в качестве шагов мастера. Пока мне нужно только получить доступ к методам контроллера представления (элементы массива - это тип UIViewController
) Я могу использовать var viewControllers = [UIViewController]()
, или если я хочу получить доступ только к свойству myData
, я изменяю тип элемента массива на MyObject
.
Но проблема в том, что мне нужно получить доступ к методам из UIViewController
и из протокола.
Вот почему я ищу типа массива, как «все объекты, которые подклассы UIViewController
и реализует протокол MyProtocol
.
Я пробовал:
var viewControllers = [UIViewController: MyProtocol]()
// является Dict- `вар viewControllers = UIViewController, где MyProtocol
- ` вар viewControllers = UIViewController.conforms (к: MyProtocol)
- ...
Но ничего не работает должным образом.
Элементы массива * have * должны быть введены как 'UIViewController', так и' MyProtocol'? В противном случае вы можете просто использовать методы из 'UIViewController', которые вам требуются в' MyProtocol' (или создать для них отдельный протокол и использовать протокол). – Hamish
Да, они должны быть обоими. Может быть, моя идея реализации неверна. – Tobonaut