Быстрое некорректное закрытие в объявлении функции - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь использовать Моя сеть в моем проекте.Я использую этот пример .В качестве примера делается запрос на подключение к серверу в контроллере представления в строке 56, которая находится ниже, и использование методов обратного вызова в строке 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) -> Void' в ожидаемый тип аргумента '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)
}

1 Ответ

0 голосов
/ 18 декабря 2018

Moya.Completion уже является блоком завершения.Вам просто нужно передать Moya.Completion в качестве аргумента вместо (Moya.Completion) -> Void.

progressCompletion progressCompletionClosure: @escaping Moya.Completion)

Ваш текущий код, как и подсказка об ошибке, отправляет ((Result) -> Void) -> Void

...