为什么我不能在此默认参数值中使用速记参数名称?

时间:2015-08-26 02:10:39

标签: swift closures

以下代码不是编译,虽然在我看来它应该:

public typealias ACallback = (first: [Int], second: String, third: String, fourth: CustomType) -> [Int];

public func doSomething(callback: ACallback = { $0 } {
    ...
}

我在函数声明的行中出现错误:

  

'(第一个:[Int],第二个:字符串,第三个:字符串,第四个:自定义类型)'不可转换为' [Int]'

当我声明这样的函数时,它可以工作:

public fund doSomething(callback: ACallback = { first, _, _, _ in first } {

如果我用内联相同的定义替换ACallback,也没有区别。

2 个答案:

答案 0 :(得分:1)

我认为

callback: ACallback = { $0.0 }应该没问题。如错误所述,$0表示此闭包的整个参数列表的元组。

答案 1 :(得分:1)

虽然问题不重复 - this question的答案似乎解释了这种行为。

要回答评论中的问题 - 您可以将类型重新定义为结构或类(无论什么是合适的),并且能够将参数称为属性(而不是元组中的位置编号)。