首页 > 解决方案 > Swift 如何将闭包从一个函数传递到另一个函数?

问题描述

假设我有 2 个功能:

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

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

如果我想从函数 A 调用函数 B,如何将函数 A 的闭包参数作为参数传递给函数 B 的参数?

看起来像这样的东西:

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
}

标签: swiftclosures

解决方案


试试下面这个例子。

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)")
    })
}

推荐阅读