在Swift中,如果我声明一个基于泛型类型的类:

class BasicRequest<T>{
}

class StartRequest: BasicRequest<BasicPayload> {
}

然后尝试使用泛型方法:
class SocketClient {

  public func send(request: BasicRequest<Any>){
  }
}

它不编译:
SocketClient.shared.send(request: StartRequest())

带信息
无法将“StartRequest”类型的值转换为所需的参数
键入“基本任务”
为什么?类型信息应该在继承链中可用。

最佳答案

泛型在Swift中是不变的,这意味着BasicRequest<Any>BasicRequest<BasicPayload>不兼容,即使BasicPayloadAny兼容。不变量就是这样工作的,在这个方向上你几乎无能为力。
您可以做的是使send成为泛型,从而允许传递任何类型的BasicRequest实例:

public func send<T>(request: BasicRequest<T>){
}

关于swift - Swift(4)无法转换为通用基类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52385471/

10-09 01:13