Функция с несколькими аргументами замыкания выдает ошибку «Выражение разрешено для неиспользуемой функции» - PullRequest
0 голосов
/ 11 февраля 2019

Я написал учебник по обработчикам завершения Swift , чтобы написать эту функцию.Всякий раз, когда я пытаюсь использовать замыкание, я получаю сообщение об ошибке: «Выражение разрешается в неиспользуемую функцию»функция

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Обобщенная функция completion возвращает замыкание, которое предназначено для использования в качестве обработчика завершения для некоторых асинхронных функций.

Например, предположим, что у вас есть какой-то асинхронный метод, подобный этому:

func someAsyncFunc(completion: @escaping (Data?, Error?)->Void) {
    //...
}

Таким образом, чтобы использовать замыкание, вам может потребоваться сохранить возвращаемое замыкание в некоторой переменной замыкания и использовать его позже:

    let myCompletionHandler = completion(onResult: { (j: Data) in
        print(j)
    }) { (e) in
        print(e)
    }

    someAsyncFunc(completion: myCompletionHandler)

Или же вы можете записать его непосредственно в качестве параметра:

    someAsyncFunc(completion: completion(onResult: { (j) in
        print(j)
    }) { (e) in
        print(e)
    })

В любом случае, я не уверен, действительно ли это улучшение, и вам лучше найти лучший учебник.

0 голосов
/ 11 февраля 2019

Ваша функция возвращает закрытие.Что вы не сделали, так это использовали закрытие.Сделайте это:

completion(onResult: { (j) in
    print(j)
}) { (e) in
    print(e)
}()

Обратите внимание на круглые скобки в конце.Или чтобы быть более понятным:

let completionClosure = completion(onResult: { (j) in
    print(j)
}) { (e) in
    print(e)
}
completionClosure()
0 голосов
/ 11 февраля 2019

Это выглядит нормально для меня, вы всегда можете попробовать

completion(onResult: { (j) in print(j)}, 
           onError: { (e) in print(e) })
...