【发布时间】:2017-06-24 16:59:11
【问题描述】:
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]()// 是一个字典 - `var viewControllers = UIViewController where MyProtocol
- `var viewControllers = UIViewController.conforms(to: MyProtocol)
- ...
但没有按预期工作。
【问题讨论】:
-
数组的元素是否有 可以同时输入为
UIViewController和MyProtocol?否则,您可以将UIViewController中所需的方法粘贴到MyProtocol中(或为它们创建单独的协议并使用协议组合)。 -
是的,他们必须是两者。也许我对实现的想法是错误的。
标签: ios swift uiviewcontroller