Свифт, как передать замыкание от одной функции к другой? - PullRequest
0 голосов
/ 01 марта 2020

Скажите, что у меня есть 2 функции:

functionA(@escaping closureA: ((Double) -> ())) {
    // Some Code for function A
}

functionB(@escaping closureB: ((Double) -> ())) {
    // Some Code for function B
}

Если я хочу вызвать функцию B из функции A, как передать параметр замыкания функции A в качестве аргумента параметру functionB?

Что-то похожее на это:

func A(@escaping closureA: ((Double) -> ())) {
    // Some Code for function A
    B(<trying to pass closureA>)

}

func B(@escaping closureB: ((Double) -> ())) {
    // Some Code for function B
}

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Вам нужно экранировать параметр in для замыкания, чтобы начать с него, а затем при вызове замыкания, отправляемого в функциюB, необходимо указать значение в качестве аргумента

func functionA(closureA: (@escaping (Double) -> ())) {
    functionB(closureB: closureA)
}

func functionB( closureB: (@escaping (Double) -> ())) {
    closureB(3.2)
}

Пример

functionA(closureA: {print($0 * 2.0)})

6,4

0 голосов
/ 01 марта 2020

Попробуйте этот пример ниже.

func functionA(closure:(()->Void), completionHandler: @escaping (Double) -> Void) {
    closure()
    completionHandler(1.0)
}

func  functionB(completionHandler: @escaping (Double) -> Void) {
    completionHandler(2.0)
}

func nestedClosure() {
    functionA(closure: {
        functionB { (value) in
            print("\(value)")
        }
    }, completionHandler: { (value) in
        print("\(value)")
    })
}
...