繁体   English   中英

参数中的Swift Complex类型

[英]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) {...}

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

然后,使您的特定类成为DummyClass子类:

class TestClass: DummyClass {...}

您可以通过该新课程:

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

您问错了问题。 换句话说,尝试严重设计错误。

视图应该知道,它的代表是一个UIViewController或一个子类。

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

视图仅应委派特定的职责。 这些责任中的每一项都必须由协议方法或属性来描述。

如果您更详细地说明问题(为什么您认为需要直接访问UIView中的UIViewController的整个定义),我们可以帮助您避免此错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM