Как передать замыкание с параметрами в функцию? (Swift)

У меня также была такая же проблема, но я нашел решение. Просто создайте объект jframe сверху и вызовите методы jframe внизу, как jf.pack(), jf.setVisible(), jf.setSize(), jf.setDefaultCloseOpetion() должны быть в нижней части всех пользовательских интерфейсов, добавленных в этот фрейм, вы найдете он отлично работает.

0
задан Raimondo Previdi 17 March 2019 в 21:00
поделиться

1 ответ

Я думаю, вы не понимаете, как работают параметры по умолчанию. Параметры по умолчанию - всего лишь вспомогательный синтаксис. Они облегчают вызов функции непосредственно в коде, но не изменяют саму функцию. Невозможно поддерживать любое количество параметров, если они действительно необходимы; вам нужно что-то передать.

Так что просто расширьте это, чтобы сделать синтаксическое удобство явным с перегрузкой:

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 или [119] где-то в нем.

0
ответ дан Rob Napier 17 March 2019 в 21:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: