У меня есть расширение до UIAlertController
, которое я использую для отображения всплывающих Условий обслуживания в моем приложении.
Я хотел бы иметь две версии этого всплывающего окна: одно, где пользователь может принять или отклонить ToS (отображается при первом использовании приложения), и другое, где пользователь может прочитать их.а затем отклонить всплывающее окно (которое будет отображаться на экране настроек в любое время).
Два всплывающих окна чрезвычайно похожи, поэтому вместо перезаписи одной и той же функции дважды,Я бы лучше создал другую функцию, которая вызывает termsOfServiceAlert()
с измененными аргументами.Однако, поскольку пользователь должен иметь возможность отклонять ToS только при вызове termsOfServiceAlternativeAlert()
, мне нужно сделать аргументы accept
и decline
необязательными .Я знаю, как это сделать для обычных переменных, но не могу найти способ заставить его работать для функций, которые передаются в качестве аргументов.
Вот фрагмент кода:
extension UIAlertController {
static func termsOfServiceAlert(
title: String,
message: String?,
acceptText: String,
accept: @escaping ()->Void,
declineText: String,
decline: @escaping ()->Void) -> UIAlertController {
/* set up alert */
let acceptTermsHandler: (UIAlertAction) -> Void = { (alertAction in
accept()
}
let declineTermsHandler: (UIAlertAction) -> Void = { (alertAction in
decline()
}
let accept = "Accept"
alert.addAction(UIAlertAction(title: accept, style: .default, handler: acceptTermsHandler
let decline = "Decline"
alert.addAction(UIAlertAction(title: decline, style: .default, handler: declineTermsHandler
return alert
}
static func termsOfServiceAlternativeAlert(message: String, dismiss: String) -> UIAlertController {
/* ERROR - Nil is not compatible with expected argument type '() -> Void */
return termsOfService(
message: message,
acceptText: dismiss,
accept: nil,
declineText: nil,
decline: nil)
}
}