У меня также была такая же проблема, но я нашел решение. Просто создайте объект jframe
сверху и вызовите методы jframe
внизу, как jf.pack()
, jf.setVisible()
, jf.setSize()
, jf.setDefaultCloseOpetion()
должны быть в нижней части всех пользовательских интерфейсов, добавленных в этот фрейм, вы найдете он отлично работает.
Я думаю, вы не понимаете, как работают параметры по умолчанию. Параметры по умолчанию - всего лишь вспомогательный синтаксис. Они облегчают вызов функции непосредственно в коде, но не изменяют саму функцию. Невозможно поддерживать любое количество параметров, если они действительно необходимы; вам нужно что-то передать.
Так что просто расширьте это, чтобы сделать синтаксическое удобство явным с перегрузкой:
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]
где-то в нем.