参数中的Swift Complex类型

时间:2015-08-07 14:30:07

标签: swift type-alias

为了更清楚一点,我正在寻找一个解决方案,让用户传递一个具有特定子类和协议的类,即一个继承了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);
    }

}

他们的情况有点发生,但这是真正相关的唯一部分。目前,如果类没有继承正确的协议,我会使用初始化程序失败

2 个答案:

答案 0 :(得分:1)

您可以创建一个表示您要求的虚拟类型。在这种情况下,typealias不起作用,但这可能是:

class DummyClass: MyViewController, MyDelegateProtocol {}

func needsRequiredClass(input: DummyClass) {...}

MyViewControllerMyDelegateProtocol是你提到的超类和委托。 DummyClass将有一个空的实现。

然后,将您的特定类子类设为DummyClass

class TestClass: DummyClass {...}

你可以传入新课程:

let test = TestClass()
self.needsRequiredClass(test)

答案 1 :(得分:1)

你问的是错误的问题。换句话说,在一个严重的设计错误中尝试鞋拔。

视图知道其委托是UIViewController或子类。

委托应该是遵守(采用)特定委托协议的任何类。

视图应该只委派具体的职责。这些职责中的每一项都必须由协议方法或财产来描述。

如果您更详细地解释了您的问题(为什么您认为需要直接访问UIViewControllerUIView的完整定义),我们可以帮助您避免此错误。< / p>