在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>
不兼容,即使BasicPayload
与Any
兼容。不变量就是这样工作的,在这个方向上你几乎无能为力。
您可以做的是使send
成为泛型,从而允许传递任何类型的BasicRequest
实例:
public func send<T>(request: BasicRequest<T>){
}
关于swift - Swift(4)无法转换为通用基类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52385471/