以下代码不是编译,虽然在我看来它应该:
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
,也没有区别。
答案 0 :(得分:1)
callback: ACallback = { $0.0 }
应该没问题。如错误所述,$0
表示此闭包的整个参数列表的元组。
答案 1 :(得分:1)
虽然问题不重复 - this question的答案似乎解释了这种行为。
要回答评论中的问题 - 您可以将类型重新定义为结构或类(无论什么是合适的),并且能够将参数称为属性(而不是元组中的位置编号)。