Почему имена аргументов требуются для вызовов функций и не допускаются для функций, назначенных переменным? - PullRequest
1 голос
/ 04 апреля 2019

Если у меня есть следующий код, почему я не обязан использовать имена аргументов в вызове функции, и вместо этого выдается ошибка, когда я пытаюсь добавить их?

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

1 Ответ

4 голосов
/ 04 апреля 2019

Когда вы назначаете свой метод как замыкание, вы просто назначаете типы параметров и возвращаемый тип метода, поэтому тип вашего замыкания на самом деле (Types of arguments) -> Return type

В вашем конкретном случае: (Any) -> Void

Как видите, у этого замыкания нет имен для аргументов, и вы не можете их добавить.Поэтому добавление метки аргумента при вызове вашего замыкания не сработает.

Но вы можете указать параметр, который замыкание принимает, когда вы объявляете его, а затем вы можете работать с ним внутри области замыкания ... аналогично объявлению функции

faz = { bar in 
    ... // you can work with bar of type `Any`
}
...