[英]Cannot convert return expression of generic protocol's function type implementation
我想以下面描述的方式使用swift泛型:
class ResponseContainer {
}
protocol DisplayManageable {
func getModel<ModelType: ResponseContainer>() -> ModelType?
}
class DisplayBaseManager<ObtainedModelType: ResponseContainer>: NSObject, DisplayManageable {
var modelObtained: ObtainedModelType? = nil
func getModel<ObtainedModelType>() -> ObtainedModelType? {
return modelObtained
}
}
但是这个代码有问题,更确切地说这行有一个问题:
return modelObtained
我收到了错误:
无法转换'ObtainedModelType?'类型的返回表达式 返回类型'ObtainedModelType?'
现在我的简单问题,为什么我不能这样做? 这有什么问题?
协议函数和类定义中的泛型是相同的。 在我看来,一切看起来都很好,从逻辑上来说还可以,所以为什么我不这样做呢?
在
func getModel<ObtainedModelType>() -> ObtainedModelType? { ... }
ObtainedModelType
引入了一个本地通用占位符,并从类定义中隐藏了ObtainedModelType
class DisplayBaseManager<ObtainedModelType: ResponseContainer>
这会导致奇怪的错误消息
无法转换'ObtainedModelType?'类型的返回表达式 返回类型'ObtainedModelType?'
因为return modelObtained
具有泛型类型return modelObtained
ObtainedModelType?
从类定义,但预期的返回类型是ObtainedModelType?
从方法定义。
您可能需要的是具有关联类型的协议
protocol DisplayManageable {
associatedtype ModelType: ResponseContainer
func getModel() -> ModelType?
}
和一个采用ModelType == ObtainedModelType
协议的类:
class DisplayBaseManager<ObtainedModelType: ResponseContainer>: NSObject, DisplayManageable {
var modelObtained: ObtainedModelType? = nil
func getModel() -> ObtainedModelType? {
return modelObtained
}
}
Łukasz,我现在不知道它为什么不编译,但我找到了编译它的方法。 只需更改return语句:
return modelObtained as? ObtainedModelType
但我仍在等待某人解释原始代码中出错的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.