Swift:为什么从另一个函数返回的函数不能具有默认值?

时间:2019-02-06 14:55:35

标签: swift closures

假设我们有一个带有默认参数值的函数:

// function with default parameter values
func a(m:Int = 0, n:Int = 1) {
  print(m, n)
}

a()         // 0 1
a(m:2)      // 2 1
a(n:3)      // 0 3
a(m:4, n:5) // 4 5

现在我想从另一个函数返回完全相同的函数:

func b() -> (Int,Int)->Void {
  func a(m:Int = 0, n:Int = 1) {
    print(m, n)
  }
  return a    // function returned
}

let a2 = b()

a2(m:4, n:5)  // ⛔ error: extraneous argument labels 'm:n:'
a2(4)         // ⛔ error: missing argument for parameter #2  
a2(4,5)       // OK

现在,我既不能使用参数标签,也不能使用默认值作为参数,为什么?

函数a2()与函数a()似乎完全不同,幕后发生了什么?

0 个答案:

没有答案