为了更清楚一点,我正在寻找一个解决方案,让用户传递一个具有特定子类和协议的类,即一个继承了viewController和委托协议的类。我知道可以创建协议列表但找不到正常工作的解决方案。目前我使用初始化程序并使用viewcontroller作为参数并检查函数内部的委托,但我宁愿我可以在参数中使用这些类型。
编辑: 希望做类似的事情
Protocol prot:Delegate{}
class cla:ViewController{}
class impl{
init(mainUI: cla, prot){
do things
}
}
That way back in the main view controller I can do something like this
class viewController: cla, prot{
var view:impl
override func loadView() {
//Attach to Screen
view = impl(mainUI: self);
}
}
他们的情况有点发生,但这是真正相关的唯一部分。目前,如果类没有继承正确的协议,我会使用初始化程序失败
答案 0 :(得分:1)
您可以创建一个表示您要求的虚拟类型。在这种情况下,typealias不起作用,但这可能是:
class DummyClass: MyViewController, MyDelegateProtocol {}
func needsRequiredClass(input: DummyClass) {...}
MyViewController
和MyDelegateProtocol
是你提到的超类和委托。 DummyClass
将有一个空的实现。
然后,将您的特定类子类设为DummyClass
:
class TestClass: DummyClass {...}
你可以传入新课程:
let test = TestClass()
self.needsRequiredClass(test)
答案 1 :(得分:1)
你问的是错误的问题。换句话说,在一个严重的设计错误中尝试鞋拔。
视图不知道其委托是UIViewController或子类。
委托应该是遵守(采用)特定委托协议的任何类。
视图应该只委派具体的职责。这些职责中的每一项都必须由协议方法或财产来描述。
如果您更详细地解释了您的问题(为什么您认为需要直接访问UIViewController
中UIView
的完整定义),我们可以帮助您避免此错误。< / p>