Swift 函数声明中的闭包不正确

Swift incorrect closure in function declaration

我正在尝试使用 Moya Networking in my project. I am using this 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)
}

显示错误:

Cannot convert value of type '((Result) -> Void) -> Void' to expected argument type 'Completion' (aka '(Result) -> ()')

我想我的函数 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