Swift在函数声明中的错误关闭

时间:2018-12-18 06:28:59

标签: ios swift moya

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

1 个答案:

答案 0 :(得分:1)

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

progressCompletion progressCompletionClosure: @escaping Moya.Completion)

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