就我个人而言,我觉得你的一些代码并没有真正意义。喜欢 :
extension ShimEndPoint: ReturnType {
var returnType: ImmutableMappable.Type {
switch self {
case .deAuthorize(_, _):
return EmptyResponse.self
case .authorize(_, _):
return AuthorizeResponse.self
case .step(_, _, _, _):
return StepResponse.self
}
}
}
一个对象如何根据自身来确定自身的类型?然后返回一个与其本身不同的值类型?
因此,我在这里试图提供的帮助只是试图找到您想要实现的目标的解决方案,而不是解决现有代码。
我假设您尝试做的事情是确定要映射到的对象类型,具体取决于运行时的结果情况。枚举本身是ImmutableMappable
它有3种情况:.authorize
, .deauthorize
and .step
.
功能.request
将返回此类型并根据情况确定要映射到的类型。但是,由于需要在编译时确定对象的类型,因此所有结果类型EmptyResponse
, AuthorizeResponse
and StepResponse
这里必须遵循相同的协议(我假设,Response
此处),结果也只会返回协议而不是特定的类类型。
return Shim.provider
.request(endPoint)
.timeout(7,
scheduler: MainScheduler.asyncInstance)
.retry(3)
.flatMap { result: ImmutableMappable -> Observable<Response> in
return Observable.create{
switch result {
case .authorize:
observer.onNext(AuthorizeResponse())
case .deAuthorize:
//etc
case step:
//etc.
}
}
}
希望这能回答您的问题!