【问题标题】:Generic swift IOS "is not a subtype of" code compilation error通用 swift IOS“不是”代码编译错误的子类型
【发布时间】:2015-09-20 20:54:28
【问题描述】:

我正在快速学习泛型。而且不明白出了什么问题。

任何人,请解释我如何在另一个模板中插入通用模板。

BasePresenter 类的声明看起来像

class BasePresenter<VIEW : BaseView>{

图片错误代码如下:

【问题讨论】:

  • 为什么将presenter声明为数组?有什么理由吗?看起来你只是想要 var presenter:PRESENTER ?
  • @Shripada,感谢您的回复。是的,这是我的错误。将其作为单个对象。但这并不能解决问题
  • 你能用正确的截图更新你的问题吗?截图仍然描述了错误的代码
  • @Shripada,我已经更新了截图,但我上面提到的错误是一样的
  • 您找到解决方案了吗?我们自己的 MVP 库也面临着完全相同的问题。

标签: xcode swift generics


【解决方案1】:

在您的类声明中,您似乎引入的类型(即 PRESENTER)是不需要的。我不确定,为什么编译器允许这种部分类型声明,后来当您尝试使用这种部分类型创建变量时正确地给出错误。目前的解决方法是避免这种类型,并直接将您的 Presenter 变量声明为 BasePresenter 类型,或者使用类型别名表示您的 PRESENTER 类型:

类似的东西-

class BaseViewController <VIEW: BaseView> : UIViewController, BaseView{

typealias PRESENTER  = BasePresenter<VIEW>!
var presenter : PRESENTER!

//Rest of the class body...
}

【讨论】:

  • 感谢您的回答。但是BaseViewController 的继承者应该在变量var presenter 中有BasePresenter 的继承者实例。我该怎么做?
  • 您为什么要这样做?您可以将 BasePresenter 的任何子类型分配给演示者。
  • @Shripada 所以我们可以使用该 var 作为特定的 PRESENTER 实现并直接调用其方法,而无需将 BasePresenter 转换为 PRESENTER 的子类中的 BaseViewController。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2020-01-23
相关资源
最近更新 更多