#swift #function #syntax #arguments
#swift #функция #синтаксис #аргументы
Вопрос:
Если у меня есть следующий код, почему я не обязан использовать имена аргументов в вызове функции, а вместо этого выдается ошибка при попытке их добавления?
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:
Когда вы назначаете свой метод в качестве замыкания, вы просто назначаете типы параметров метода и возвращаемый тип, поэтому тип вашего замыкания на самом деле (Types of arguments) -> Return type
В вашем конкретном случае: (Any) -> Void
Как вы можете видеть, у этого замыкания нет имен для аргументов, и вы не можете их добавить. Таким образом, добавление метки аргумента при вызове вашего закрытия не сработает.
Но вы можете назвать параметр, который принимает закрытие при его объявлении, и тогда вы сможете работать с ним внутри области закрытия … аналогично объявлению функции
faz = { bar in
... // you can work with bar of type `Any`
}