TL;DR
我正在寻找一个类似于“所有子类为UIViewController
且实现了协议MyProtocol
的对象”的数组类型 (var array = [TheTypeImLookingFor]()
)。
Explanation
我正在构建一个向导视图,其中包含容器视图和嵌入的子视图(控制器)。只要我只有一个基础类型的子视图控制器,就没有问题。
由于屏幕内容的原因,我现在有一堆类型为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
中(或者创建一个单独的协议并使用协议组合)。 - Hamish