我正在尝试在项目中使用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)
}

最佳答案

Moya.Completion已经是一个完成块。您只需要传递Moya.Completion作为参数,而不是(Moya.Completion) -> Void即可。

progressCompletion progressCompletionClosure: @escaping Moya.Completion)

您当前的代码(如错误提示)正在发送((Result) -> Void) -> Void

10-08 05:51