我正在尝试在项目中使用Moya Networking。我正在使用此example。该示例是在下面的第56行上发出moya请求连接到视图控制器中的服务器,并在第72行和第78行中使用回调方法
func uploadGiphy() {
provider.request(MultiTarget(Giphy.upload(gif: Giphy.animatedBirdData)),
callbackQueue: DispatchQueue.main,
progress: progressClosure,
completion: progressCompletionClosure)
}
我想在 NetworkHelper.swift 中而不是在视图控制器中编写此函数,但是,在我的视图控制器中使用它的两个回调方法(第72行和第78行)。
所以我在 NetworkHelper 中编写了该函数:
static func getUsers(amount:Int=2,
gender:Gender = .Male,
success successCallback: @escaping ([UserModelMain]) -> Void,
error errorCallback: @escaping (Swift.Error) -> Void,
failure failureCallback: @escaping (Moya.MoyaError) -> Void,
progress progressClosure: @escaping (Moya.ProgressResponse) -> Void,
progressCompletion progressCompletionClosure: @escaping (Moya.Completion) -> Void)
{
provider.request(.getUsers(amount: amount, gender: gender),
callbackQueue: DispatchQueue.main,
progress: progressClosure,
completion: progressCompletionClosure)
}
显示错误:
无法转换类型'(((Result)-> Void)的值 ->无效”到预期参数类型“完成”(又名“((结果)->()”))
我认为我的函数 getUsers 写错了。我搞砸了我在关闭方面无能为力。
请帮助。
来自Moya网络库的请求功能的源代码:
/// Designated request-making method.
Returns a `Cancellable` token to cancel the request later.
@discardableResult
open func request(_ target: Target,
callbackQueue: DispatchQueue? = .none,
progress: ProgressBlock? = .none,
completion: @escaping Completion) -> Cancellable {
let callbackQueue = callbackQueue ?? self.callbackQueue
return requestNormal(target, callbackQueue: callbackQueue, progress: progress, completion: completion)
}
答案 0 :(得分:1)
Moya.Completion
已经是一个完成区块。您只需要传递Moya.Completion
作为参数,而不是(Moya.Completion) -> Void
。
progressCompletion progressCompletionClosure: @escaping Moya.Completion)
您当前的代码(如错误提示)正在发送((Result) -> Void) -> Void