Здесь происходит следующее: внутренняя логика кнопки пытается передать отправителя, который является UIButton
в параметре Date
вашего метода. Однако параметр sender не будет передан, если у вашего метода нет аргументов.
Необязательные параметры в этой ситуации не работают. Однако вы можете создать еще одну перегрузку без параметров для goToNextScreen
:
@objc func goToNextScreen() {
goToNextScreen(selectedDate: nil)
}
и изменить
btn.addTarget(self, action: #selector(goToNextScreen), for: .touchUpInside)
до
btn.addTarget(self, action: #selector(goToNextScreen as () -> Void), for: .touchUpInside)
так, чтобы он отличался между двумя перегрузками.
Обратите внимание, что причина, по которой просто написание #selector(goToNextScreen)
является неоднозначной, заключается в том, что у вас есть два метода с именем goToNextScreen
, и Swift необходимо разрешить один из них. Но это не может быть только с именем. Вот похожая ситуация:
class Foo {
@objc func f() {}
func f(x: Int) {}
let selector: Selector = #selector(f) // ambiguous use of f
}
Редактировать: Вы не можете сделать это без создания другого метода. Селекторы - негибкие вещи.