Swift5.7附带了主要的关联类型。我尝试使用这些代码,但它显示了错误:不能专门化协议类型'GenericDelegate‘
class BaseResponse {}
class ConcreteResponse: BaseResponse {}
protocol GenericDelegate<Response>: AnyObject {
associatedtype Response: BaseResponse
func didGetResponse(response: Response)
}
class BaseCGI<T:BaseResponse> {
weak var delegate: (any GenericDelegate<T>)? //error: Cannot specialize protocol type 'GenericDelegate'
func didGetResponse(response:T) {
self.delegate?.didGetResponse(response: response)
}
}如何使具有指定关联类型的存在类型成为变量?
像这样使用:
class FooDelegate: GenericDelegate {
func didGetResponse(response: ConcreteResponse) {
//do something
}
}
let cgi = BaseCGI<ConcreteResponse>
cgi.delegte = FooDelegate()
cgi.didGetResponse(ConcreteResponse())发布于 2022-07-22 09:45:34
在我看来,您必须使类BaseCGI在响应类型和委托类型上都是通用的。此外,您需要告诉编译器,委托的响应类型与类的响应类型相同。
class BaseCGI<Response: BaseResponse, Delegate: GenericDelegate> where Delegate.Response == Response {
weak var delegate: Delegate?
func didGetResponse(response: Response) {
self.delegate?.didGetResponse(response: response)
}
}然后创建一个实例,如
let cgi = BaseCGI<ConcreteResponse, FooDelegate>()https://stackoverflow.com/questions/73078122
复制相似问题