【问题标题】:Why are argument names required for function calls, and not allowed for functions assigned to variables?为什么函数调用需要参数名称,而分配给变量的函数却不允许?
【发布时间】:2019-08-26 14:52:22
【问题描述】:
如果我有以下代码,为什么我不需要在函数调用中使用参数名称,而是在尝试添加它们时抛出错误?
func foo(bar: Any) {}
var faz = foo
foo(1) // Missing argument label 'bar:' in call
foo(bar: 1)
faz(1)
faz(bar: 1) // Extraneous argument label 'bar:' in call
【问题讨论】:
标签:
swift
function
syntax
arguments
【解决方案1】:
当你将你的方法指定为闭包时,你只需指定方法的参数类型和返回类型,所以你的闭包类型实际上是(Types of arguments) -> Return type
在您的具体情况下:(Any) -> Void
如您所见,此闭包没有参数名称,您无法添加它们。所以在调用闭包时添加参数标签是行不通的。
但是,您可以在声明闭包时命名参数,然后您可以在闭包范围内使用它...类似于声明函数
faz = { bar in
... // you can work with bar of type `Any`
}