Function Swift 2-函数中作为参数的函数

Function Swift 2-函数中作为参数的函数,function,parameters,swift2,Function,Parameters,Swift2,我有一个函数,作为参数还有另外两个函数。 我的代码工作得很好,但是,当我调用函数时,我希望看到参数的名称 这是我的职责: func dispatchSuperMain(global_queue:()->(), main_queue:()->()) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { global_queue()

我有一个函数,作为参数还有另外两个函数。 我的代码工作得很好,但是,当我调用函数时,我希望看到参数的名称

这是我的职责:

func dispatchSuperMain(global_queue:()->(), main_queue:()->()) {

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

            global_queue()

            dispatch_async(dispatch_get_main_queue(), {

                main_queue()

            })

        })
    }
我使用:(working)调用函数

如何格式化函数以查看参数的名称

例如,我想像这样调用我的函数:(不工作)


作为高阶函数参数的函数/闭包与常规函数的常规类型参数在相同的规则下工作。高阶函数的附加功能是,您可以将最后一个闭包作为尾随闭包放置,在调用函数时放置在paranthese的外部和后面(正如您在上面的示例中对第二个函数参数所做的那样)

无论如何,对于高阶函数中的第一个函数参数,请显式添加一个外部参数名(否则,请忽略函数的第一个参数)。为了使用第二个函数参数已经存在的外部参数名,在调用它时,只需将两个闭包都放在函数parantesse中即可

例如,考虑

func f(fun1 fun1: (Int) -> (Int), fun2: (Int) -> (Int)) -> Int {

    let a = 1
    let b = fun1(a)
    let c = fun2(a)

    return b+c
}

let a = f(fun1: { 2*$0 }, fun2: { 3*$0 } )

print(a) // 5
或者,您的
void
-函数示例的简化版本

func g(global_queue global_queue: () -> (), main_queue: () -> ()) {
    global_queue() // prints "global"
    main_queue() // prints "main"
}

g(global_queue: { print("global") }, main_queue: { print("main") })
如果您选择以最终闭包作为尾部调用函数,我认为不可能使用其外部参数名。这有点含蓄地解释了,因为我们可以在不使用外部名称的情况下使用尾随闭包,即使它不是函数的第一个参数。例如,对于常规函数,我们必须始终为函数调用提供外部名称(对于第一个参数以外的参数),除非我们在函数签名的相应参数中明确添加前缀
\

func h(a: Int, b: Int) {} 
h(1, 2)    // error: missing argument label 'b:' in call
h(1, b: 2) // ok

func hI(a a: Int, _ b: Int) {}
hI(1, 2) // ok

@斯诺很乐意帮忙!
func g(global_queue global_queue: () -> (), main_queue: () -> ()) {
    global_queue() // prints "global"
    main_queue() // prints "main"
}

g(global_queue: { print("global") }, main_queue: { print("main") })
func h(a: Int, b: Int) {} 
h(1, 2)    // error: missing argument label 'b:' in call
h(1, b: 2) // ok

func hI(a a: Int, _ b: Int) {}
hI(1, 2) // ok