Swift 3要求默认情况下所有参数标签都包含在函数调用中。然而,当一个函数被赋给一个变量(或常量),并且该变量通过参数时,不需要参数标签 - 甚至不允许。
例如,对于具有两个Int参数(int1
和int2
)的函数,该函数分配给名为varName
的变量:
varName (1, 5) // will work, but
varName (int1: 1, int2: 5) //produces an error for extraneous argument labels.
我的理解是否正确?
这里不要求参数标签的理由是什么? (我找不到任何关于此的文件。)
答案 0 :(得分:1)
示例:
func foo(bar: Int, baz: String) {
print(bar, baz)
}
foo(bar: 123, baz: "abc") // Valid, prints: 123 abc
let x = foo //Inferred type: (Int, String) -> Void
x(123, "abc") // Valid, prints: 123 abc
let y: (bar: Int, baz: String) -> Void = foo // Invalid
// ERROR at line 10, col 9: function types cannot have argument label 'bar'; use '_' instead
// let y: (bar: Int, baz: String) -> Void
// ^
// _
// ERROR at line 10, col 19: function types cannot have argument label 'baz'; use '_' instead
// let y: (bar: Int, baz: String) -> Void
// ^
// _
y(bar: 123, baz: "abc") // Invalid
// ERROR at line 19, col 2: extraneous argument labels 'bar:baz:' in call
// y(bar: 123, baz: "abc") // 123 abc
// ^~~~~~ ~~~~~