[英]Swift Complex type in parameter
为了更清楚一点,我正在寻找一种解决方案,供用户传递带有特定子类和协议的类,即,一个继承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);
}
}
他们还有更多的事情发生,但这是唯一真正相关的部分。 当前,如果类未继承正确的协议,我将使用初始化程序来使其失败
您可以创建一个虚拟类型来代表您的需求。 Typealias在这种情况下不起作用,但这可能是:
class DummyClass: MyViewController, MyDelegateProtocol {}
func needsRequiredClass(input: DummyClass) {...}
MyViewController
和MyDelegateProtocol
是您提到的超类和委托。 DummyClass
将有一个空的实现。
然后,使您的特定类成为DummyClass
子类:
class TestClass: DummyClass {...}
您可以通过该新课程:
let test = TestClass()
self.needsRequiredClass(test)
您问错了问题。 换句话说,尝试严重设计错误。
视图不应该知道,它的代表是一个UIViewController或一个子类。
委托应该是遵守(采用)特定委托协议的任何类。
视图仅应委派特定的职责。 这些责任中的每一项都必须由协议方法或属性来描述。
如果您更详细地说明问题(为什么您认为需要直接访问UIView
中的UIViewController
的整个定义),我们可以帮助您避免此错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.