学习MVP设计思想时看到一个文章里面的一段代码,很是疑惑,简单记录下分析过程。
在iOS 上实现MVP(附代码)
其中Presenter实现如下
表示Presenter 是一个泛型类,符合某个类型的一个类,这个类型目前暂用E来表示。其中有一个E类型的成员变量_view
Presenter的子类HttpPresenter依然是一个泛型类,符合E这种特性
目前为止,E这个类型都还是抽象的,知道HttpPresenter的子类声明的时候才给实例化这个类型
HomePresenter的声明注意此处的<id<SubHomeViewProtocol>> 写法相当于
实例化E此处表明了E这个类型就是一个遵循了SubHomeViewProtocol的任意id类型对象 。
Presenter 类为抽象E类型
HttpPresenter 继承自Presenter类并没有具体化这个E类型依然为抽象E类型
HomePresenter继承自HttpPresenter时具体化了这个E类型 为符合id<SubHomeViewProtocol> 标准的类型
子类继承自父类时,可以声明自己的泛型类型也可以不声明,可以具体化父类的泛型类型也可以不具体化.泛型类的表现像是子类声明时具体化父类的泛型类型,仅在当前类将泛型类型具体为某个标准。
如HttpPresenter的实现文件内 _view 仅仅可以调用SubHomeViewProtocol的方法,调用别的协议会出现问题,但是在HttpPresenter的实现文件内_view是可以调用任意自定义协议的方法的
网友评论