我在创建自己的Moya插件时遇到了问题,下面的代码是这样的:
import Foundation
import Moya
import Result
public final class CustomPlugin: PluginType {
public func willSend(_ request: RequestType, target: TargetType) {
print("willSend")
}
public func didReceive(_ result: Result<Response, MoyaError>, target: TargetType) {
print("didReceive")
}
}我从Xcode编译器得到以下错误:
泛型类型“结果”具有太多的类型参数(got 2,但预期为1)
我可以通过更改
public func didReceive(_ result: Result<Response, MoyaError>, target: TargetType)至
public func didReceive(_ result: Swift.Result<Response, MoyaError>, target: TargetType)但是,在进行此更改后,不会调用didReceive方法。
谁能告诉我怎么解决这个问题吗?
谢谢!
发布于 2019-07-29 13:18:35
在Moya中,结果被定义为泛型枚举。
enum Result<T>{
case success(T)
case failure(String)
}其中泛型参数类型只能是一个,但结果是将两个参数应用于泛型。
发布于 2019-07-29 18:03:00
取决于您的Moya版本,有不同的可能性:
如果你用的是Moya 13*
我们为Result类型使用捆绑框架(您导入了该框架)。这可能与Swift自己的Result类型不匹配(这是一种不同的类型,因此您得到了警告)。
用Result<Response, MoyaError>替换Swift.Result<Response, MoyaError>只表示您使用的是不同的Result类型,因此您实现的方法与Moya要求您实现的方法不同(而且您不会收到警告,因为来自PluginType的所有插件方法都是可选实现的)。
真正的解决方案应该是使用Result框架提供的Result类型,这意味着类似于以下内容:
public func didReceive(_ result: Result.Result<Response, MoyaError>, target: TargetType) {
print("didReceive")
}注意:如果它不起作用,那么检查是否有兼容的Result框架版本,并将其导入插件文件中。
如果您正在使用Moya 14.* (目前正处于alpha阶段):
很可能不导入Result,您应该很好:)
发布于 2020-04-26 16:26:25
只需导入插件文件中的结果就可以解决我的问题。
我认为这是因为编译器使用Swift.Result而不是第三方结果,所以它将执行默认的协议扩展。
我使用Xcode 11.3,Swift 5,Moya 13.0.1,结果4.1.0
https://stackoverflow.com/questions/57254207
复制相似问题