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
我正在尝试使用 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