Вы не передали бы функцию как таковую, скорее передали бы закрытие в качестве аргумента. Функции в swift являются частными случаями закрытия. Закрытие можно считать анонимной функцией. Замыкания, мгновенные методы и статические методы отличаются друг от друга только своей способностью захвата контекста, кроме их очевидных синтаксических различий.
struct Alerts {
static func showBasicAlert(on vc: UIViewController, with title: String, message: String, okAction: @escaping (() -> ())){
let alert = UIAlertController.init(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction.init(title: "OK", style: .default) { (UIActionAlert) in
okAction()
//dismiss statement below is unnecessary
vc.dismiss(animated: true, completion: nil)
}
alert.addAction(okAction)
}
}
И вы вызываете функцию как
Alerts.showBasicAlert(on: your_viewController, with: "abcd", message: "abcd", okAction: {
//do whatever you wanna do here
})
Надеюсь, это поможет
Кстати, вам не нужно указывать явный vc.dismiss(animated: true, completion: nil)
в качестве последнего оператора в любом действии, после запуска действия UIAlertController
по умолчанию отклоняется