Ошибки довольно просто объяснить.
1) Ваш класс AnyNetworkRequest
действительно не соответствует протоколу NetworkRequest
. И я не понимаю, почему это должно быть, кстати. Неудовлетворенными требованиями являются свойства requestSerializer
и requestResponse
вместе с необходимыми псевдонимами типов. В общем, вы можете переписать это следующим образом:
public class AnyNetworkRequest: NetworkRequest {
var requestSerializer: RequestSerializationType {
return request.requestSerializer
}
var requestResponse: RequestResponseType? {
return request.requestResponse
}
private let request : _NetworkRequest<RequestSerializationType, RequestResponseType>
// ...
}
НО это приведет нас к
2) Где вам нужно указать что-то для связанных типов. Вы не можете использовать RequestSerializationType
и RequestResponseType
в обобщенном объявлении, поскольку они не являются конкретными типами.
Таким образом, вы не можете выполнить стирание типа таким способом.
Я не знаю, почему здесь нужно избавляться от обобщений, кроме ввода меньшего количества букв, но я могу предложить использовать псевдонимы типа:
typealias DataNetworkRequest = _NetworkRequest<ConcreteHTTPRequestSerializer, ConcreteDataNetworkResponse>
typealias JSONDataNetworkRequest = _NetworkRequest<ConcreteJSONRequestSerializer, ConcreteJSONDataNetworkResponse>
Таким образом, вы избежите избыточного наследования и будете иметь более четко выраженные типы на случай, если это ваша цель.
AnyNetworkRequest
в этом случае вообще не понадобится.