【发布时间】:2018-09-18 11:21:46
【问题描述】:
在 Swift 中,如果我声明一个基于泛型类型的类:
class BasicRequest<T>{
}
class StartRequest: BasicRequest<BasicPayload> {
}
然后尝试使用泛型方法:
class SocketClient {
public func send(request: BasicRequest<Any>){
}
}
它不编译:
SocketClient.shared.send(request: StartRequest())
有消息
无法将“StartRequest”类型的值转换为预期参数 输入“基本请求”
为什么?类型信息应该在整个继承链中可用。
【问题讨论】:
-
错误消息中的 ReconnectRequest/AbstractWebSocketMessage 在您的代码中没有定义。请发布真实代码/消息。
-
Any与泛型无关。 -
抱歉,文字已更正
-
看起来像 Swift generic coercion misunderstanding 的副本:
BasicRequest<Any>和BasicRequest<BasicPayload>是不同的、不相关的类型。 -
反复出现的问题,泛型在 Swift 中是不变的,这就是你的代码不起作用的原因。