Я хотел бы иметь протокол, который выглядит примерно так:Как реализовать протокол Swift с общим свойством типа ограничения?
protocol ReturnType {
var returnType: ImmutableMappable.Type { get }
}
часть перечисления, реализующего протокол:
extension ShimEndPoint: ReturnType {
var returnType: ImmutableMappable.Type {
switch self {
case .deAuthorize(_, _):
return EmptyResponse.self
case .authorize(_, _):
return AuthorizeResponse.self
case .step(_, _, _, _):
return StepResponse.self
}
}
}
EmptyResponse, AuthorizeResponse и StepResponse все реализации ImmutableMappable. Теперь я хотел бы использовать свойство «ReturnType» при вызове функции:
return Shim.provider
.request(endPoint)
.timeout(7,
scheduler: MainScheduler.asyncInstance)
.retry(3)
.mapObject(endPoint.returnType)
Линия MapObject дает мне следующую ошибку компилятора: «Невозможно преобразовать значение типа„“ImmutableMappable.Type ожидаемого типа аргумента «T.Type»
функция подписи «MapObject» является:
public func mapObject<T : ImmutableMappable>(_ type: T.Type) -> RxSwift.Observable<T>
Как определить и реализовать протокол, так что я могу передать в моей ReturnType к mapObj функция ect?
Я нашел подобный вопрос, но, к сожалению, я не мог решить мою проблему с помощью ответа Дано: Returning constrained generics from functions and methods