Я думаю, вы не понимаете, как работают параметры по умолчанию.Параметры по умолчанию - всего лишь вспомогательный синтаксис.Они облегчают вызов функции непосредственно в коде, но не изменяют саму функцию.Невозможно поддерживать любое количество параметров, если они действительно необходимы;вам нужно что-то передать.
Так что просто расширите это, чтобы сделать синтаксис удобным с явной перегрузкой:
func myFunction(_ str1: String?, _str2: String?)
{
//whatever
}
func myFunction() {
myFunction(nil, nil)
}
И затем вы можете вызвать его.
func delay(_ function: @escaping () -> Void)
{
if !myExternalCondition
{
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
self.delay(function)
}
}
else
{
function()
}
}
Возможно, вы просто неправильно поняли, как работают замыкания.С вышеприведенным delay
все в порядке, используя исходное определение myFunction
(с параметрами по умолчанию):
delay { myFunction() }
Следующее также хорошо:
delay { myFunction("xyz") }
Дело в том, что замыкание не имеет параметров.Вы можете думать о myFunction
как о «закрытии», но это не правильно.Закрытие является частью {...}
.Если бы у него были параметры, вы ожидали бы синтаксис x in
или $0
где-то в нем.